【问题标题】:How can I use functions and objects without require them in NodeJS如何在 NodeJS 中使用函数和对象而不需要它们
【发布时间】:2018-06-12 13:40:43
【问题描述】:

我已经学习 NodeJS 大约一年了,今天我发现了一些奇怪的东西。我们都知道,为了在另一个模块中使用一个模块(函数、对象或变量),我们必须导出和导入它,除了 String、Number、Promise 等本机模块。我安装了一个外部包用于单元测试,名为 @ 987654321@.

这里奇怪的是我创建了两个测试模块:logic.jslogic.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 中看到的那样,我可以访问 expecttest 方法,而且我并没有提及 Jest。

这里的问题是:

  • 这怎么可能?
  • 使用我的模块执行此操作是一个好习惯

【问题讨论】:

  • 1) globals 2) 不。
  • 当我尝试这个时,我得到ReferenceError: test is not defined
  • @ChrisG 你安装了 Jest 吗? npm install --save-dev jest
  • @MarluanEspiritusantoGuerrero 当然。
  • 您需要使用jest 命令行而不是node 命令来启动笑话测试

标签: javascript node.js import module export


【解决方案1】:

正如 Jonas W 在 cmets 中所述,它们使用了所有应用程序共有的 global 变量。

全局变量的使用很简单

test.js

global.myObject = 'MyMan'

app.js

require('./test')

console.log(myObject)

加载app.js 将呈现MyMan

您可能会说我实际上导入了测试模块,而 Jest 没有。

问题是您使用node yourFile.js 执行您的节点应用程序,但您使用jest 命令行实例化您的笑话测试。

jest 命令行处理其框架(expecttest 方法)与您的脚本之间的绑定。

这是一个好习惯吗?

我会说不。除非你打算制作一个像 Jest 这样的库,它有自己的命令行启动器,并且你想为你的库的用户提供这样的工具。

Node 的力量体现在模块组织中,不要害怕使用它们。

【讨论】:

    猜你喜欢
    • 2011-02-09
    • 2020-07-03
    • 1970-01-01
    • 2020-07-08
    • 2016-07-13
    • 2019-01-07
    • 1970-01-01
    • 2023-03-20
    • 2021-12-21
    相关资源
    最近更新 更多