我一直在研究NodeJS大约一年,今天我发现了一些奇怪的东西。我们都知道,为了在另一个模块中使用模块(函数,对象或变量),我们必须导出和导入它,除了String,Number,Promise等本机模块。我安装了一个外部包用于单元测试,名为{ {3}}
这里奇怪的是我创建了两个名为logic.js
和logic.test.js
的测试模块,我没有导入Jest模块,但是我可以访问它的所有方法。让我们展示一些代码:
logic.js
module.exports.add = function(a, b){
return a + b;
}
logic.test.js
const lib = require('../logic')
test('Add - Should return the sum of two numbers', () => {
const result = lib.add(1,3);
expect(result).toBe(4);
});
正如您在logic.test.js
中所看到的,我可以访问 expect
和 test
方法,而且我没有任何关于笑话。
这里的问题是:
答案 0 :(得分:2)
正如 Jonas W 在评论中所述,他们使用了所有应用程序通用的global
变量。
使用全局变量非常简单
test.js
global.myObject = 'MyMan'
app.js
require('./test')
console.log(myObject)
正在加载app.js
将呈现MyMan
您可能会说我实际上导入了测试模块而Jest没有。
问题在于您使用node yourFile.js
执行节点应用程序,但是您使用jest
命令行实现了您的jests测试。
jest
命令行处理其框架(expect
和test
方法。)和您的脚本之间的绑定。
这是一个好习惯吗?
我会说不。除非你打算让像Jest这样的库拥有自己的命令行启动器,并且你想将这样的工具提供给库的用户。
Node的力量存在于模块组织中,不要害怕使用它们。