node.js - 为特定模块编写测试时如何使用绝对导入路径

标签 node.js ecmascript-6 mocha.js

我正在开发一个 NodeJS (v. 8.12.0, EcmaScript 6) 项目,其项目结构类似于:

project_root/
    src/
        utils/
            protocol_messages/
                helpers.js
    tests/
        unit/
            utils/
                protocol_messages/
                    helpers.js

我正在使用 Mocha 作为测试框架编写测试。

问题
helpers.jstests/unit/utils/protocol_messages/ 下,导入被测模块的正确方法是什么?

详细说明:
我想避免相对路径:require('../../../../../src/utils/protocol_messages/helpers') .
它可以工作,但很难看,如果项目结构发生变化,我也必须重写测试导入。

(我是 Javascript 新手,所以我可能做错了几件事。)

更新
this question 中提供的解决方案:
  • require.main.require : 在对 this answer 的评论中, “如果代码包含单元测试(如 Mocha 测试),则此解决方案将不起作用”。
  • 将我的实用程序提取到 Node 模块对我来说没有意义,因为代码是非常特定于应用程序的。
  • 有一个额外的node_modules在我的src/ NodeJS 项目的项目根目录似乎没有意义。
  • 当我只使用 NodeJS 中可用的功能并编写 CommonJS 项目时,使用 Javascript 转译器似乎有点矫枉过正。

  • 如果我对上述任何一点有误,请指出,因为我很茫然。在我看来,NodeJS 并没有提供本地方式来导入具有绝对路径的 CommonJS 模块。

    最佳答案

    您可以使用wavy npm 包。

    This module lets you turn things like require('../../../../foo') into something like require('~/foo'). The way it works is that on postinstall it creates a symlink in app/node_modules/~ to point to app/

    关于node.js - 为特定模块编写测试时如何使用绝对导入路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52478251/

    相关文章:

    node.js - 无法使用 npm 安装 phonegap

    javascript - Rails Webpacker 和 stage-2 类转换属性不起作用

    javascript - 如何从 Map 对象获取嵌套值?

    Firebase 函数 : storage cannot be stubbed when writing unit tests

    javascript - 如何测试传递需要自身的nodejs模块

    node.js - Promise 无法解析 express 中间件中的异步函数内部

    javascript - 分页计算算法

    javascript - Node JS POST 请求返回未定义的正文

    javascript - 此 react 库代码周围的 "{" "}"大括号有何意义?

    javascript - 测试对象是否具有多个属性