Javascript 笑话:如何模仿一个重击者呼叫另一个重击者?
我有下面的重击声:Javascript 笑话:如何模仿一个重击者呼叫另一个重击者?,javascript,reactjs,unit-testing,redux,jestjs,Javascript,Reactjs,Unit Testing,Redux,Jestjs,我有下面的重击声: function thunkOne() { return dispatch => { callToApi().then(() => { dispatch(someNonThunkAction()); dispatch(thunkTwo()); }); } } function thunkTwo() { return dispatch => {
function thunkOne() {
return dispatch => {
callToApi().then(() => {
dispatch(someNonThunkAction());
dispatch(thunkTwo());
});
}
}
function thunkTwo() {
return dispatch => {
anotherCallToApi.then(dispatch(someOtherAction()));
}
}
我只想测试thunkOne
和mockthunkown
,这样在测试thunkOne
时它就不会被执行
我尝试过这样做,但没有成功:
import * as someActions from './actions';
it ('thunkOne should dispatch someNonThunkAction and thunkTwo', () => {
someActions.thunkTwo = jest.fn();
const expectedActions = [
{ type: SOME_NON_THUNK_ACTION, data: {} }
],
store = mockStore(initialState);
store.dispatch(someActions.thunkOne()).then(() => {
expect(store.getActions()).toEqual(expectedActions);
expect(someActions.thunkTwo).toHaveBeenCalled();
});
someActions.thunkTwo.mockRestore();
});
运行此测试时,我遇到以下错误:
[错误]操作必须是普通对象。使用自定义中间件进行异步操作
我如何模拟
thunkTwo
并只测试thunkOne
?一篇关于这一点的博文:谢谢,但该博文中给出的案例与我的不同-在他的例子中,他的thunk调用了非异步操作。在我的例子中,一个异步操作正在调用另一个异步操作。不确定这是否重要,您是否尝试过?它不会直接应用于您的问题,但您当前的测试没有测试任何内容。expect
语句写在then
callback中,但您不会指示Jest应该等待承诺得到解决。您可以通过添加expect.assertions(2)轻松检查它代码>在测试开始时。要使其工作,您应该从测试中返回承诺或使用async/await语法。此外,我认为您可能会因为没有使用thunk中间件创建模拟存储实例而出错。