我有两个这样定义的函数:
export function builder(){ ... };
export function action() { return () => builder() };
现在我正在尝试编写一个模拟构建器函数并返回{};
的测试 import * as m from 'redux/modules/mymodule';
it('call buildSolrUrl', () => {
const spy = expect.spyOn(m, "builder").andReturn({});
m.action()();
expect(spy.calls.length).toEqual(1);
});
问题是构建器在这种情况下不会模拟。 如果我更改我的代码:
export function action() { return () => this.builder() };
该方法被模拟,但我的程序不再起作用,因为action()返回稍后执行的函数,this
未解析为正确的对象。
要恢复:我的代码有效,因为对builder()的调用是通过闭包完成的。 测试无法以这种方式模拟函数,因为函数是通过闭包调用的。
处理此问题的最佳方法是什么?