如何对具有内部依赖性的ES6模块进行单元测试

时间:2018-02-02 17:38:38

标签: javascript unit-testing es6-modules

当我有一个包含对同一模块中另一个函数的依赖的函数时,编写单元测试并遇到并发症。这是模式:

export function foo(){
  ...do stuff...
}
export function bar(){
  const thing = foo();
  ...do stuff...
}

当我将这些导入我的测试文件(使用ES6语法)时,我似乎无法将foo()用于测试bar(),因为bar()总是引用foo()的版本模块范围,而不是我当地的测试范围。至少,我认为这是问题所在。

我设法在这个网站上找到关于类似问题的其他问题,但解决方案似乎总是重做模块中的代码而不是测试文件中的一些聪明的解决方法。除了重写模块中的代码之外,没有解决方法吗?

1 个答案:

答案 0 :(得分:1)

您的情况与此类似:

class X {
    foo() { return this.bar(); }
    bar{} { return true; }
}

您的问题是:如何使用foo的存根测试bar。像这样,你不能。如果您希望能够替换bar的实现,则需要重写foo的工作方式。

对我而言,bar似乎对自己有用,foo使用bar的结果。然后你可以想知道foobar是否应该在同一个类/模块中。也许bar可以在其自己的类/模块中。

像:

class Bar {
    bar() { return true; }
}
class Foo {
    constructor(bar) {
        this.bar = bar;
    }
    foo() { return this.bar(); }
}

现在foo依赖于bar,您可以替换它的实施。