如何使用不同的NODE_PATH运行NodeJS单元测试

时间:2015-08-05 10:03:16

标签: node.js jasmine gulp

问题

我可以在Node / Gulp中运行单元测试,它们的NODE_PATH与从环境中继承的NODE_PATH不同吗?

问题

我有一个项目正在基于Rhino的应用程序中运行,其中require从一组已定义的位置加载脚本。

我想对我的组件进行单元测试。为了运行这些测试,我需要能够从Node环境调用我的脚本。但结尾的错误类似于:

Error: Cannot find module 'lib/foo/foo.js'

这是因为我的脚本包含require(foo/foo) ...如果NODE_PATH包含lib,则会很好。这里的问题是我只希望这个文件夹出现在单元测试中,而不是其他gulp任务。

我想我面临的问题是我遇到的所有测试跑步者(例如 karma )都是基于浏览器的。所以我的问题可能是:是否有运行纯NodeJS测试的测试运行器?

2 个答案:

答案 0 :(得分:3)

你总是可以按照

的方式做点什么
NODE_PATH=NODE_PATH:/path/to/lib npm test`.

NODE_PATH只是一个环境变量。通常,您依赖于登录shell配置文件中持久存在的值。但您可以根据自己的需要设置/取消设置/更改它。

仅为执行此命令的持续时间设置环境变量...

VARIABLE=VALUE command <args...>

在shell会话期间设置环境变量,即直到退出/注销或重置shell ...

export VARIABLE=VALUE
command <args...>

要使其在shell会话中保持不变,您必须将export VARIBALE=VALUE添加到

.bashrc
.bash_profile
/etc/profile
/etc/profile.d/

中的文件

取决于您的偏好和环境。

编辑:我不公平地假设您使用的是Linux或Mac。如果不是这样,我道歉。对于Windows,您可以执行类似

的操作
%NODE_PATH%=%NODE_PATH%;\path\to\lib\

或者其他什么。您还可以转到系统属性 - &gt;高级设置 - &gt;环境变量并在那里设置/取消设置/更改全局持久性环境变量。

编辑#2:为了清晰起见而进行了重构。

答案 1 :(得分:2)

我花了几个小时来寻找我的问题的答案。在运行时操作NODE_PATH时,节点为quite hostile

所以我自己的问题的答案是:不,基于gulp的测试无法使用不同的NODE_PATH运行,除非这些测试spawn a new process

我无法找到能够在不同环境中生成 node 的方便的测试运行器。我能够编写自己的代码来在一个新的流程中运行单元测试,但是它有太多的边缘&#34;粗糙的边缘&#34;。

最后我选择了app-module-path模块来保持简单(我不想要一个特殊的包装shell脚本)。这不是我想要的,但它非常接近。