【发布时间】:2018-09-14 16:16:46
【问题描述】:
我正在尝试编写一个单元测试来测试在调度操作时是否调用了正确的方法。这是我的文件:
actions.js
export const foo = () => ({type: 'fooAction'})
services.js
function* watchFoo(){
yield takeEvery('fooAction', setFoo);
}
function setFoo() { console.log('foo'); }
现在在我的规范文件中,我正在测试操作以查看是否调用了 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 也没有被调用。需要明确的是,问题是:
- 为什么我的 setFoo 方法没有被调用?
- 如何为这种方法编写单元测试?
【问题讨论】:
-
Services.js /
watchFoo()看起来并没有以任何方式集成到您的商店中。我不明白为什么会调用它。如果这个测试有效,它将测试 redux-mock-store 而不是你的代码。 -
在您的测试中,不要使用模拟商店。直接测试 watchFoo 即可。
-
@stone,商店配置添加WatchFoo,我只是这里没有添加。应用程序工作得很好。这些问题用于测试。
-
@VinodKolla 你知道怎么解决吗?
标签: reactjs react-redux jestjs