2016-11-10 52 views
0

所以我有一个依赖:依赖加载和文件系统惩戒

dep = require('dep') 

如果我模拟出DEP调用的函数之前的文件系统中,DEP从导出的文件未找到。

mockFs({}) 
dep.bar() #file where dep exported from not found 

如果我打电话嘲讽了DEP从发现导出的文件之前的功能。

dep.foo() 
mockFs({}) 
dep.bar() #works 

有什么想法来解释这种行为?

回答

0

require()调用缓存,所以dep使用真实的文件系统,因为它可能叫require('fs'),这是没有嘲笑。

惩戒fs后来意味着任何调用require('fs')将使用模拟,但已加载任何不受影响。

+0

谢谢!任何想法让它继续并加载?看起来像其他函数也加载,如果事先调用dep.foo() – Drew

+0

这是一个棘手的部分关于单元测试和嘲笑 - 文件的加载顺序!通常,所有require()都位于每个文件的顶部,因此所有这些依赖关系都会被加载,因为在第一个测试文件(和第一个mock)甚至运行之前,所有文件都会先加载!一些模拟库具有可以接管现有功能甚至需要缓存的“间谍”。有时你可以改变那些'require()'调用的地方,以便有效地模拟它们。 – clay

+0

对于我在调用上面的场景2中的第二个函数时没有发现与依赖关系相关的文件而言没有考虑到的内容有什么想法?在所有代码之前都需要依赖项。谢谢你! – Drew