2013-12-19 3 views
7

PostgreSQLの使用NodeJSのデータベース関連コードのテスト

私は、API用の適切なテストスイートを設定しようとしています。これまでのところ動作しますが、テストはメインデータベースで直接実行されます。私はテストを作成したり、そのような場合に編集したものをすべて削除しなければなりません。

私はそれが悪いことを知っています(私は、変更を元に戻すことを忘れるかもしれないし、シーケンスを台無しにすることもあります)。だから私は、同じ構造とベースのデータを持つテストデータベースを作成し、その後、それを削除したいと思います。このアプローチは、この場合に取るべき良いアプローチですか?

このようにしたい場合、どうすればいいですか? NodeJSにSQLスクリプトを実行する方法はありますか?私はシェルスクリプトを試しましたが、これまではパーミッションが完全に混乱していましたので、NodeJSを使うと簡単になると思いました。

私は私のテストにモカを使用しています。

+0

これらのAPIエンドポイントまたはモデルのテストはありますか? – srquinn

+0

APIエンドポイントの場合。私はすべてのルートをテストし、私が考えることができるあらゆる辺のケースを試し、良い、悪い要求を試みる。これらの要求は、データベース内に行を作成することが多く、次のテストで使用されます。私はこれをやっているとは確信していません。 –

+1

テストを緊密にしたい場合は、実際にAPIエンドポイントをテストする範囲にない別の障害ポイント(db接続、スキーマの問題など)を設定するのではなく、データを嘲笑することをおすすめします。 REALデータベースに接続すると、テストが単体テストから統合テストに変換されます。両方とも彼らの場所がありますが、それらを混ぜ合わせるべきではありません。 – srquinn

答えて

6

私は別のテストデータベースを提案します。これは軽いものであり、そこにあるデータを知りたい(テストすることができます!)。すべてのビジネスルールを処理できる基本データセットは、SQLファイル(またはエクスポートメソッド)としてエクスポートできます。

通常、アプリケーションにはデータベースへの接続があり、テストフレームワークには、テストを開始する前にメソッドを実行するためのアプローチがあります。ここでは、テストDBを指定します。データベースアクセスオブジェクト(DAO)またはスクリプトメソッドは、メソッドパラメータまたはrequireステートメントなど、何らかの方法でメイン接続を利用します。

たとえば、knex moduleを使用して接続しますDBに渡してクエリを作成します。 their docsで指定されているように、私は単一のDB接続を初期化して参照します。テストスイートを実行する前に、私はテスト用DB

var Knex = require('knex'); 
Knex.knex = Knex.initialize({ 
    client : 'mysql', 
    connection : { 
    host : '127.0.0.1', 
    user : 'root', 
    password : 'root', 
    database : 'testdb', 
    charset : 'utf8' 
    } 
}); 
であるとは私の接続を設定することができ、私のユニットテストで今すぐ

var knex = require('knex').knex; 

var Knex = require('knex'); 
Knex.knex = Knex.initialize({ 
    client : 'mysql', 
    connection : { 
    host : 'my.domain.com', 
    user : 'dbrole', 
    password : 'password', 
    database : 'productiondb', 
    charset : 'utf8' 
    } 
}); 

私のDAOは、このような接続を取得します

あなたはそれを持っています!テストとプロダクションではまったく同じコードが使用され、プロダクションDBはテストから分離されます。このパターンは多くのフレームワークで動作することができます。したがって、テストDBを使いこなす場合はテストを修正し、すべてのテストが完了したらデフォルトにリストアする必要があります。

編集:ちなみに、knexはpostgreで動作し、純粋なノードJSでクエリを作成する楽しい方法です。生のSQLも実行できます。

+1

node.jsについては、BookshelfJS http://bookshelfjs.orgをご覧ください。これは、knexの上にあるデータマッパーレイヤーです。 – demisx

関連する問題