【发布时间】:2018-10-15 23:27:26
【问题描述】:
这是我试图模拟的实际代码
import {combineReducers} from 'redux'
import user from '../user'
export default combineReducers({
user
})
我想设置一个这样的测试:
describe('API Reducer', () => {
it('calls combineReducers om modules', function() {
const combinedReducerSpy = sinon.spy(...) // <-- UNKNOWN
sinon.assert.calledWith(combinedReducerSpy, {user})
});
});
【问题讨论】:
-
你不使用任何模拟,你需要模拟导入然后用间谍替换它。
-
环境是什么?您是在 Node 中还是在浏览器中进行测试?测试文件是如何构建的?测试中是否使用了 Webpack?
-
我知道如何在 Python 中做到这一点,但我是 JavaScript 新手。如何模拟导入然后用间谍替换它?我在创建反应应用程序中使用 jest 运行测试。问题是,当我将文件导入另一个文件时,它会在导入时执行。
-
是的,您使用 Jest 的事实很重要。这个问题主要针对 Jest,而不是针对诗乃。试试
jest.doMock('redux'); require('.../mycode'); let { combineReducers } = require('redux'); expect(combineReducers).toBeCalledWith(user)。不要忘记 beforeEach 中的jest.resetModules()。我希望 Jest 清除模块缓存并允许重新导入模块,但我无法确认。
标签: javascript unit-testing ecmascript-6 sinon