我正在尝试编写单元测试来测试在调度操作时是否调用了正确的方法。这是我的文件:
actions.js
export const foo = () => ({type: 'fooAction'})
services.js
function* watchFoo(){
yield takeEvery('fooAction', setFoo);
}
function setFoo() { console.log('foo'); }
现在在我的spec文件中,我正在测试动作以查看是否调用了setFoo。
测试 /services.js
import configureStore from 'redux-mock-store';
describe('test setFoo', () => {
const mockStore = configureStore([]);
const store = mockStore([]);
store.dispatch(actions.foo());
const storeActions = store.getActions();
expect(storeActions).toEqual([action]); // this is true
})
当我尝试调试setFoo时,不会调用setFoo方法。我确实将间谍设置为未被调用的setFoo(在上面的代码中删除了)。我还尝试为服务创建一个模拟,然后窥探模拟的服务。即使这样,也不会调用setFoo。需要说明的是,问题是:
答案 0 :(得分:0)
watchFoo
的任何使用情况,因此无法告诉您它为何无效。您的问题也没有提到takeEvery
是什么以及它应该如何与您的代码进行交互。您使用的是redux-saga
吗?watchFoo()
*。 您正在编写的测试是测试services.js与redux-mock-store
的集成,这不是一个有用的测试。
如果您想要反映运行代码的集成测试,则需要使用真实商店进行测试。
但你特别提到了单元测试,所以你根本不需要商店。
*如果您使用的是还没有提及的redux-saga,但我猜测您的takeEvery
来自哪里,建议的方法是测试在这里描述:https://redux-saga.js.org/docs/advanced/Testing.html。不需要嘲笑。