我玩 Meteor(和 Meteorite)已经有一段时间了,我很喜欢我可以轻松启动和运行。现在我想向应用程序添加一些测试,发现主要障碍是在测试脚本中包含对 Meteor 使用的包的引用/要求。
例如,我编写了一个简单的类,它在内部使用了一些下划线方法。然后我写了一个简单的 mocha 脚本来测试它。
当我跑
mocha my_test.js
它抱怨 _ 未定义。如果我添加
var _ = require('underscore')._
对于我的测试代码,它找不到下划线库,因为这些包都包裹在一个紧凑的小包中,而该包不在mocha 的 NODE_PATH 上。我可以指定该路径,但这种硬编码路径似乎是个坏主意。
有没有办法在 Meteor 环境中运行节点进程/脚本(如 mocha)?我正在寻找类似于 ruby-land 的“bundle exec”的东西。我研究过 Meteorite,它似乎几乎可以将命令直接传递给 Meteor,所以我希望你们可能想要使用这个。
更新:
写完这篇,我开始看流星源代码。我能够写出一些主要做我想做的事情,并且认为 Meteor 团队可能会评论这是否看起来是一条好路。从流星外壳脚本(/usr/local/meteor/bin/meteor)开始,我在底部添加了一个 case 语句,它根据命令名称切换模式。该文件可以替换当前的流星启动脚本,然后添加从流星执行到流星的链接,瞧。使用这个替换脚本,我可以正常运行流星。我也可以跑
meteor-exec `which mocha` tests/mocha_test.coffee --compilers coffee:coffee-script
我得到了我期望的结果。我可以 require('underscore') ,它是从 Meteor 的第三方库中提取的。我可以在我的 npm 全局包空间中包含“mocha”和“chai”。
如果这看起来是正确的心态,并且代码与你们可能进行的方式一致,我可以提交适当的拉取请求。
替换流星 shell 脚本在这个要点https://gist.github.com/4416913中。我在下面添加了差异。
提前致谢
罗杰斯先生
附言。保持良好的工作。我真的很喜欢流星。
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" "$@"