在Meteor环境中运行其他节点进程?

时间:2012-12-31 01:31:01

标签: meteor

我一直在玩Meteor(和Meteorite),并且喜欢我开始运行的轻松程度。现在我想在应用程序中添加一些测试,发现主要障碍是在测试脚本中包含Meteor使用的包的引用/要求。

作为一个例子,我有一个我编写的简单类,它在内部使用一些下划线方法。然后我写了一个简单的摩卡脚本来测试它。

当我跑步时

mocha my_test.js

它抱怨_未定义。如果我添加

var _ = require('underscore')._

到我的测试代码,它找不到下划线库,因为这些包都被包装在一个紧密的小包中,在nodE_PATH上用于mocha的不是。我可以指定该路径,但这种硬编码路径似乎是一个坏主意。

有没有办法在Meteor环境中运行节点进程/脚本(如mocha)?我正在寻找类似于ruby-land的'捆绑exec'的东西。我已经看过陨石了,它似乎几乎把命令传递给了流星,所以我希望你们可能想要把它放在这个。

更新:

写完之后,我开始查看流星源代码。我能够写出一些主要我想要的东西,并认为Meteor团队可能会评论这是否是一条好路。从meteor shell脚本(/ usr / local / meteor / bin / meteor)开始,我在底部添加了一个case语句,它根据命令名称切换模式。此文件可以替换当前的流星启动脚本,然后添加meteor-exec到meteor和voila的链接。有了这个替换脚本,我就能以正常的方式运行流星。我也可以跑

meteor-exec `which mocha` tests/mocha_test.coffee --compilers coffee:coffee-script

我得到了我期望的结果。我可以要求('下划线')从Meteor的第三方库中提取。我可以在我的npm全球包空间中加入'mocha'和'chai'。

如果这看起来是正确的思维模式,并且代码与你们的进展方式一致,我可以提交适当的拉取请求。

替换流星shell脚本位于此要点https://gist.github.com/4416913中。我在下面添加了差异。

先谢谢

罗杰斯先生

PS。保持良好的工作。我真的很喜欢流星。

diff meteor meteor.orig 
105,116c105,106
< NPM_GLOBAL_PATH=$(npm root -g)
< METEOR_THIRD_PARTY="$DEV_BUNDLE/app/lib/third"
< case $(basename $0) in
<   meteor)
<     export NODE_PATH="$DEV_BUNDLE/lib/node_modules"
<     exec "$DEV_BUNDLE/bin/node" "$METEOR" "$@"
<     ;;
<   meteor-exec)
<     export NODE_PATH="$DEV_BUNDLE/lib/node_modules:$METEOR_THIRD_PARTY:$DEV_BUNDLE/packages:$NPM_GLOBAL_PATH"
<     exec "$DEV_BUNDLE/bin/node" "$@"
<     ;;
< esac
---
> export NODE_PATH="$DEV_BUNDLE/lib/node_modules"
> exec "$DEV_BUNDLE/bin/node" "$METEOR" "$@"

1 个答案:

答案 0 :(得分:5)

你是对的,这使你可以访问下划线和节点模块,但正如你所说,你将无法以这种方式访问​​流星包(即你将无法使用Meteor.Collection)。另外值得指出的是,我们的Git存储库中的admin / node.sh与您的meteor-exec完全相同。

如果您想尝试构建更完整的解决方案,请查看app / server / server.js以了解我们如何加载包。你需要做这样的事情才能测试依赖于Meteor本身的代码。另一种方法是创建一个包装摩卡的智能包。目前还没有简单的方法可以直接从Meteor软件包中依赖NPM模块(这是在开发中),但您可以将mocha源复制到您的软件包中。然后,您可以在应用程序中运行meteor运行mocha测试(虽然仍在运行侦听端口3000的Web服务器等)