所以我有一个使用redux thunk
中间件的Redux action creator:
accountDetailsActions.js:
export function updateProduct(product) {
return (dispatch, getState) => {
const { accountDetails } = getState();
dispatch({
type: types.UPDATE_PRODUCT,
stateOfResidence: accountDetails.stateOfResidence,
product,
});
};
}
我该如何测试它?我正在使用chai
包进行测试。我在网上找到了一些资源,但不确定如何继续。以下是我到目前为止的测试:
accountDetailsReducer.test.js:
describe('types.UPDATE_PRODUCT', () => {
it('should update product when passed a product object', () => {
//arrange
const initialState = {
product: {}
};
const product = {
id: 1,
accountTypeId: 1,
officeRangeId: 1,
additionalInfo: "",
enabled: true
};
const action = actions.updateProduct(product);
const store = mockStore({courses: []}, action);
store.dispatch(action);
//this is as far as I've gotten - how can I populate my newState variable in order to test the `product` field after running the thunk?
//act
const newState = accountDetailsReducer(initialState, action);
//assert
expect(newState.product).to.be.an('object');
expect(newState.product).to.equal(product);
});
});
我的形实转换程序不执行任何异步操作。有什么建议吗
4条答案
按热度按时间jgzswidk1#
如何对Redux Thunks进行单元测试
形实转换操作创建器的全部意义在于在将来分派异步操作。在使用redux-thunk时,一个好的方法是用三个动作来模拟开始和结束的过程,从而导致成功或错误。
虽然这个例子使用Mocha和Chai进行测试,但您可以很容易地使用任何Assert库或测试框架。
使用由我们的主形实转换操作创建器管理的多个操作来建模CMAC进程
在这个例子中,我们假设您想要执行一个更新产品的异步操作,并且想要知道三个关键的事情。
好了,现在是时候根据操作生命周期的这些阶段来对redux操作进行建模了。请记住,这同样适用于所有的javascript操作,因此这通常适用于从API获取数据的http请求。
我们可以这样写我们的行为。
注意底部的忙碌看起来很忙的动作。他就是我们的思维活动创造者。因为它返回一个函数,所以它是一个被redux-thunk中间件拦截的特殊操作。该形实转换操作创建者可以在将来的某个时间点分派其他操作创建者。相当聪明。
现在,我们已经编写了操作来建模一个异步流程,这是一个用户更新。假设这个进程是一个函数调用,它返回一个promise,这将是目前处理BRAC进程的最常见方法。
为我们正在使用redux操作建模的实际BRAC操作定义逻辑
在这个例子中,我们将创建一个返回promise的泛型函数。将其替换为更新用户的实际函数或执行DMAC逻辑。确保函数返回一个promise。
我们将使用下面定义的函数来创建一个可工作的自包含示例。要获得一个工作示例,只需将此函数放入actions文件中,使其处于thunk action creator的作用域中。
我们的测试文件
crcmnpdw2#
看看食谱:根据官方文档编写测试。还有,你在测试什么,动作创建器还是缩减器?
Action Creator测试示例
减速器测试示例
你的reducer应该是一个纯函数,这样你就可以在商店环境之外单独测试它。
1szpjjfi3#
byqmnocz4#