我可以在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测试的测试运行器?
答案 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脚本)。这不是我想要的,但它非常接近。