0

MongoDBを使用するnode.jsプログラムのテストを実行するスクリプトを設定しようとしています。アイデアは、私が実行できるスクリプトが欲しいということです。

  1. デーモンとしてフォークされたMongoDBプロセスを開始します
  2. データベースにいくつかのテストデータを事前に入力します
  3. ノードサーバーを永久に起動するので、デーモンとして実行されます
  4. テストを実行する
  5. データベースからテストデータを削除します

これらすべてのステップを実行する大まかなスクリプトがあります。私の問題は、MongoDBのセットアップにさまざまな時間がかかるためsleep、スクリプトで呼び出しが発生することです。その結果、それはたまにしか機能しません。

# the directory of this script
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

# launch mongodb.
$DIR/../../db/mongod --fork --logpath ./logs/mongodb.log --logappend --dbpath ./testdb/ --quiet 

# takes a bit of time for the database to get set up, 
# and since we make it a daemon process we cant run the tests immediately
sleep 1

# avoid EADDRINUSE errors because existing node servers are up.
killall node &> /dev/null

# start up our node server using a test database.
forever start $DIR/../main.js --dbname=testdb --logpath=test/logs/testlog.log

# takes a bit of time for node to get set up, 
# and since we make it a daemon process we cant run the tests immediately
sleep 1

# run any database setup code (inject data for testing)
$DIR/../../db/mongo 127.0.0.1:27017/testdb $DIR/setup.js --quiet

# actually run the tests
node $DIR/tests.js

# kill the servers (this could be a little less heavy handed...)
killall node &> /dev/null
killall forever &> /dev/null

# finally tear down the database (drop anything we've added to the test db)
$DIR/../../db/mongo 127.0.0.1:27017/testdb $DIR/teardown.js --quiet

# and then shut mogodb down
kill -2 `ps ax | grep mongod | grep -v grep | awk '{print $1}'`

私がやろうとしていることを実行するための最良の方法は何ですか?私はここでうさぎの穴を掘り下げていますか、それともMongoDBドキュメントに何かが欠けていますか?

4

2 に答える 2

0

テストの目的は何ですか。コード内の実際のDB接続をテストすることですか、それともコードがDBからのデータを正しく処理および処理するかどうかに焦点を当てることですか。

コードがJavascriptであると仮定して、コードロジックがデータを正しく処理していることを厳密にテストし、MongoDBラッパーオブジェクトクラス(つまりMongoose)を使用している場合、ワークフローに追加したいことの1つは、作成とJasmineテストスイートを使用したスペックテストの実行。

これには、テストコードの記述、テストデータのモックアップがjavascriptオブジェクトとして含まれます。はい、つまり、DB自体からの実際のデータはスペックテストに含まれません。結局のところ、あなたの主な目的は、コードが論理的に正しく機能しているかどうかをテストすることですか?それはあなたのプロジェクトです、あなただけが答えを知っています:)

于 2012-07-04T03:16:22.777 に答える
0

あなたの主な問題が、mongod が実際にいつ起動するかを調べる方法である場合、それを通知するスクリプトを作成してみませんか?

たとえば、until ループを作成し、戻り値に基づいて、クライアントが mongo サーバーに正しく接続できるかどうかを確認できます。たとえば、使用する代わりに次のsleep 1ようなものを使用します。

isMongoRunning=-1

until [[ ${isMongoRunning} -eq 0 ]]; do
        sleep 1
        $DIR/../../db/mongo 127.0.0.1:27017/testdb $DIR/empty.js --quiet
        isMongoRunning=${?}
done

このループは、mongodb の開始後にのみ終了します。

--pidfilepathまた、終了するプロセスを簡単に見つけられるように、mongod 実行行に mongodb を追加して停止を改善したいと考えています。

于 2012-07-04T04:00:00.813 に答える