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
和mock
thunkown
,这样在测试
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中间件创建模拟存储实例而出错。