当我有一个包含对同一模块中另一个函数的依赖的函数时,编写单元测试并遇到并发症。这是模式:
export function foo(){
...do stuff...
}
export function bar(){
const thing = foo();
...do stuff...
}
当我将这些导入我的测试文件(使用ES6语法)时,我似乎无法将foo()用于测试bar(),因为bar()总是引用foo()的版本模块范围,而不是我当地的测试范围。至少,我认为这是问题所在。
我设法在这个网站上找到关于类似问题的其他问题,但解决方案似乎总是重做模块中的代码而不是测试文件中的一些聪明的解决方法。除了重写模块中的代码之外,没有解决方法吗?
答案 0 :(得分:1)
您的情况与此类似:
class X {
foo() { return this.bar(); }
bar{} { return true; }
}
您的问题是:如何使用foo
的存根测试bar
。像这样,你不能。如果您希望能够替换bar
的实现,则需要重写foo
的工作方式。
对我而言,bar
似乎对自己有用,foo
使用bar
的结果。然后你可以想知道foo
和bar
是否应该在同一个类/模块中。也许bar
可以在其自己的类/模块中。
像:
class Bar {
bar() { return true; }
}
class Foo {
constructor(bar) {
this.bar = bar;
}
foo() { return this.bar(); }
}
现在foo
依赖于bar
,您可以替换它的实施。