我想弄清楚如何正確存根這個場景,但我有點卡住了。在構造函數中存儲變量?
這種情況是,我有一個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
的測試,我更關心如何模擬有關數據。
非常好的留言!我真的很努力去嘲弄工作,但經過四處搜尋,似乎proxyquire與嘲笑非常相似,現在我已經完成了我的測試工作!謝謝@jahnestacado! :) – Scotty