【发布时间】:2017-09-22 09:49:05
【问题描述】:
我有一个 Redux 操作,它本身会调度另外两个操作。每个动作都是从导入的函数中检索的。一个来自本地模块,另一个来自外部库。
import { functionA } from './moduleA';
import { functionB } from 'libraryB';
export function myAction() {
return (dispatch) => {
dispatch(functionA());
...
dispatch(functionB());
}
}
在我的测试中,我使用sinon 沙箱来存根函数,但只有两个测试通过。我希望所有 3 个都通过。
import * as A from './moduleA';
import * as B from 'libraryB';
describe(__filename, async () => {
it('Calls 2 other actions', () => {
sandbox = sinon.sandbox.create();
const dispatch = sandbox.stub();
sandbox.stub(A, 'functionA');
sandbox.stub(B, 'functionB');
await myAction()(dispatch);
// passes
expect(dispatch.callCount).to.equal(2);
//passes
expect(A.functionA).to.have.been.called();
// fails
expect(B.functionB).to.have.been.called();
});
});
最后一个期望失败并出现错误:
TypeError: [Function: functionB] 不是间谍或对间谍的调用!
当我将函数输出到控制台时,我得到了这个,这似乎与 Babel 导入导出导出的方式有关 (ES6 re-exported values are wrapped into Getter)。这些功能可以实时工作,而不是在测试中。
{ functionA: [Function: functionA] }
{ functionB: [Getter] }
我尝试过使用stub.get(getterFn),但这只会给我一个错误:
TypeError:无法重新定义属性:fetchTopicAnnotations
【问题讨论】:
标签: javascript redux sinon