Javascript 通过es6模块上的闭包与调用实现js调用功能
我有两个定义如下的函数:Javascript 通过es6模块上的闭包与调用实现js调用功能,javascript,ecmascript-6,commonjs,Javascript,Ecmascript 6,Commonjs,我有两个定义如下的函数: export function builder(){ ... }; export function action() { return () => builder() }; 现在我试图编写一个模拟构建器函数并返回{}的测试 import * as m from 'redux/modules/mymodule'; it('call buildSolrUrl', () => { const spy = expect.spyOn(m, "builder
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);
});
问题是,在这种情况下,构建器不会得到mock。
如果我为以下内容更改代码:
export function action() { return () => this.builder() };
该方法被模拟,但我的程序不再工作,因为action()返回一个稍后执行的函数,此
未解析为正确的对象
继续:我的代码可以工作,因为对builder()的调用是通过闭包完成的。
测试无法以这种方式模拟函数,因为函数是通过闭包调用的
处理此问题的最佳方法是什么?请尝试此
导出默认函数生成器(){…}编码>然后间谍(m,'默认')..
!这是行不通的。这样做,您就不会模拟builder()函数,并且该方法的代码将被执行(我不希望)可能的重复。请尝试此export default function builder(){…}编码>然后间谍(m,'默认')..
!这是行不通的。这样做,您就不会模拟builder()函数,并且该方法的代码将被执行(我不希望)可能的重复