3

私は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" "$@"
4

1 に答える 1

5

これにより、アンダースコアとノード モジュールにアクセスできるようになりますが、あなたが言ったように、この方法で meteor パッケージにアクセスすることはできません (つまり、Meteor.Collection を使用することはできません)。また、Git リポジトリの admin/node.sh は、meteor-exec.

より完全なソリューションを構築したい場合は、app/server/server.js を見て、パッケージをロードする方法を確認してください。Meteor 自体に依存するコードをテストできるようにするには、このようなことを行う必要があります。別の方法は、スマート パッケージ ラッピング mocha を作成することです。現在、Meteor パッケージから直接 NPM モジュールに依存する簡単な方法はありませんが (これは進行中です)、mocha ソースをパッケージにコピーするだけです。その後meteor、アプリ内で実行するだけで mocha テストが実行されるようになる可能性があります (ただし、ポート 3000 でリッスンする Web サーバーを実行している場合など)。

于 2013-01-05T01:40:10.663 に答える