【发布时间】:2012-12-31 01:31:00
【问题描述】:
我已经玩了一段时间的 Meteor(和 Meteorite)了,我很喜欢我可以轻松地启动和运行。现在我想向应用程序添加一些测试,发现主要障碍是在测试脚本中包含对 Meteor 使用的包的引用/要求。
例如,我编写了一个简单的类,它在内部使用了一些下划线方法。然后我写了一个简单的 mocha 脚本来测试一下。
当我跑步时
mocha my_test.js
它抱怨 _ 未定义。如果我添加
var _ = require('underscore')._
对于我的测试代码,它找不到下划线库,因为这些包都包裹在一个紧密的小包中,not 在 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”。
如果这看起来是正确的心态,并且代码与你们可能继续的方式一致,我可以提交适当的拉取请求。
替换的流星外壳脚本在此要点https://gist.github.com/4416913 中。我在下面添加了差异。
谢谢,提前
罗杰斯先生
ps。保持良好的工作。我真的很喜欢 Meteor。
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" "$@"
【问题讨论】:
标签: meteor