js通过关闭vs调用es6模块来调用函数

时间:2016-07-26 01:54:06

标签: 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").andReturn({});
  m.action()();
  expect(spy.calls.length).toEqual(1);
 });

问题是构建器在这种情况下不会模拟。 如果我更改我的代码:

export function action() { return () => this.builder() };

该方法被模拟,但我的程序不再起作用,因为action()返回稍后执行的函数,this未解析为正确的对象。

要恢复:我的代码有效,因为对builder()的调用是通过闭包完成的。 测试无法以这种方式模拟函数,因为函数是通过闭包调用的。

处理此问题的最佳方法是什么?

0 个答案:

没有答案