私はこのシナリオを適切にスタブする方法を理解しようとしていますが、ちょっと立ち往生しています。コンストラクタの変数をスタブしますか?
このシナリオでは、db.js
ファイルにcouchdbデータベースのリスト(各データベースには特定の年のツイートエントリが含まれています)があります。
毎年新しいデータベースが作成され、その年の新しいエントリを保持するためにこのリストに追加されます(データベースのリストは一定ではなく、毎年変わります)。
だから私のdb.js
ファイルは次のようになります。このようなメソッドが追加される前に、
var nano = require('nano')(`http://${host}`);
var databaseList = {
db1: nano.use('db2012'),
db2: nano.use('db2013'),
db4: nano.use('db2014'),
db5: nano.use('db2015'),
db6: nano.use('db2016')
};
module.exports.connection = nano;
module.exports.databaseList = databaseList;
とevent.js
(シンプルなモデルファイル)ルックス:
var lastInObject = require('../../helpers/last_in_object');
var db = require('../../db');
var EventModel = function EventModel() {
this.connection = db.connection;
this.databaseList = db.databaseList;
this.defaultDatabase = lastInObject(db.databaseList);
};
EventModel.prototype.findAll =
function findAll(db, callback) {/* ... */}
私の質問は、私が行う方法であり、スタブdatabaseList
、私は安全に成長するdatabaseList
オブジェクトからの脆弱性を持つことなく、それぞれのモデルメソッドをテストできますか?
理想的には、さまざまなシナリオを模擬するために、私のテストでdatabaseListの内容をハイジャックすることができますが、私はそれに対処する方法がわかりません。
ここdefaultDatabase
プロパティは常に最後の既知のイベントを指していることを確認するために、例テストだが、ときdatabaseList
変更それがテストを行って、明らかに私は、毎年このテストを更新する必要がありますする必要はありません非常に脆い。
it('should set the default database to the last known event',() => {
var Event = require('../event');
var newEventModel = new Event();
expect(newEventModel.defaultDatabase.config.db)
.to.equal('db2014');
});
歓迎!もし私がこの間違ったことをしてしまったら、私が何をしたのか、どうやってそれにアプローチできるのか教えてください!
また、これはちょうどシナリオです。私はlastInObject
のテストをしています。私は関連するデータを模擬する方法にもっと興味があります。
非常に良い叫び声!私は実際にうまく動作するように苦労しましたが、周りを検索した後、プロキシクワイアは嘲笑と非常によく似ています。ありがとう@ jahnestacado! :) – Scotty