[解決済み] node.jsでデータベースをモックする?
質問
私のnode.jsアプリケーションで、データベースをどのようにモックアウトすればよいのでしょうか。
mongodb
をブログ REST API のバックエンドとして使用する場合、どのようにデータベースをモックアウトしますか?
もちろん、データベースを特定の
testing
-に設定することもできますが、それでもデータを保存し、コードだけをテストするのではなく、データベースもテストすることになるので、実際にはユニットテストではなく、統合テストをしていることになります。
では、どうすればいいのでしょうか?アプリケーションとデータベースの間の中間層としてデータベースラッパーを作成し、テスト時にDALを置き換えますか?
// app.js
var express = require('express');
app = express(),
mongo = require('mongoskin'),
db = mongo.db('localhost:27017/test?auto_reconnect');
app.get('/posts/:slug', function(req, res){
db.collection('posts').findOne({slug: req.params.slug}, function (err, post) {
res.send(JSON.stringify(post), 200);
});
});
app.listen(3000);
// test.js
r = require('requestah')(3000);
describe("Does some testing", function() {
it("Fetches a blogpost by slug", function(done) {
r.get("/posts/aslug", function(res) {
expect(res.statusCode).to.equal(200);
expect(JSON.parse(res.body)["title"]).to.not.equal(null);
return done();
});
});
));
どのように解決するのですか?
データベース関連のコードは、データベースソフトウェアでテストしないと、正しくテストできないと思います。なぜなら、テストするコードは javascript だけでなく、データベースのクエリ文字列も含まれるからです。あなたのケースでは、クエリが単純に見えても、それがずっとそのままであるとは限りません。
そのため、データベースエミュレーション層は、必然的にデータベース全体(ディスクストレージは除く)を実装することになります。そうなると、ユニットテストと称していても、結局はデータベースエミュレータで統合テストを行うことになります。もう 1 つの欠点は、データベース エミュレーターがデータベースと比較して異なるバグのセットを持つことになり、データベース エミュレーターとデータベースの両方についてコーディングしなければならなくなることです (IE 対 Firefox 対 Chrome などの状況のようなもの)。
したがって、私の意見では、コードを正しくテストする唯一の方法は、実際のデータベースとインターフェイスすることです。
関連
-
[解決済み] Node.jsのプログラムにコマンドライン引数を渡すにはどうしたらいいですか?
-
[解決済み] Node.jsを使うタイミングをどう判断するか?
-
[解決済み] Node.jsで終了する方法
-
[解決済み] Node.jsでファイルを書き込む
-
[解決済み] Node.jsアプリケーションをデバッグするにはどうすればよいですか?
-
[解決済み] Node.jsのmodule.exportsの目的と使い方を教えてください。
-
[解決済み] Node.jsで環境変数を読み込む
-
[解決済み] Node.jsでファイル/ディレクトリが存在するかどうかを同期的にチェックする
-
[解決済み] フェイク、モッキング、スタビングの違いとは?
-
[解決済み] モッキングとは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 再インストールを繰り返しても、npm run でモジュール 'sass' が見つからない。
-
[解決済み] エラー: nodejs の get 呼び出しで getaddrinfo ENOTFOUND が発生しました。
-
[解決済み】Node.jsのエラーECONNRESETをデバッグするにはどうすればよいですか?
-
[解決済み】エラー TRK0005: 位置特定に失敗しました。"CL.exe"
-
[解決済み】ENOENT, そのようなファイルまたはディレクトリがありません。
-
[解決済み】nodemon - app crashed - waiting for file changes before start
-
[解決済み】Passport.js - エラー: ユーザーのセッションへのシリアライズに失敗しました。
-
[解決済み] create-react-app、インストールエラー("コマンドが見つからない")。
-
[解決済み] Express.js req.bodyが未定義です。
-
[解決済み] MongoDB データベースのすべてを削除する