私はMeteor(およびMeteorite)で少し遊んでいて、物事を簡単に立ち上げて実行できるのが大好きです。ここで、アプリにいくつかのテストを追加したいと思います。主なハードルは、テストスクリプトでMeteorが使用するパッケージへの参照/要件を含めることでした。
例として、私が作成した単純なクラスがあり、内部的にいくつかのアンダースコアメソッドを使用しています。次に、それをテストするための簡単なmochaスクリプトを作成しました。
私が走るとき
mocha my_test.js
_が未定義であると文句を言います。追加した場合
var _ = require('underscore')._
私のテストコードでは、パッケージはすべてmochaのNODE_PATHにないタイトな小さなバンドルにまとめられているため、アンダースコアライブラリが見つかりません。そのパスを指定することはできますが、そのようなハードコードされたパスは悪い考えのようです。
Meteor環境でノードプロセス/スクリプト(mochaなど)を実行する方法はありますか?ruby-landの「bundleexec」に似たものを探しています。私はMeteoriteを調べましたが、コマンドはMeteorにほとんど渡されているようですので、皆さんがこれを実行したいと思っていました。
アップデート:
これを書いた後、私は流星のソースコードを見始めました。私は自分がやりたいことをほぼ実行する何かを書くことができ、Meteorチームがこれが下がるのに良い道のように思えるかどうかについてコメントするかもしれないと思いました。流星シェルスクリプト(/ usr / local / meteor / bin / meteor)から始めて、コマンド名に基づいてモードを切り替えるcaseステートメントを下部に追加しました。このファイルは、現在のmeteor起動スクリプトを置き換えることができます。次に、meteor-execからmeteorおよびvoilaへのリンクを追加します。この置換スクリプトを使用すると、通常の方法でmeteorを実行できます。私も走ることができます
meteor-exec `which mocha` tests/mocha_test.coffee --compilers coffee:coffee-script
そして、私は期待する結果を得ることができます。Meteorのサードパーティライブラリから取得した('underscore')を要求できます。また、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" "$@"