0
我想測試一下貓鼬模型。阻止proxyquire調用原始代碼?
我用proxyquire一體嘲笑它,但因爲原來的文件中註冊的模式,我得到
OverwriteModelError: Cannot overwrite `EEG` model once compiled.
因爲我需要的一切已經被proxyquire注入,我怎麼能告訴它不加載模型?
代碼以測試:
var mongoose = require('mongoose');
var db = {},
Test = require('./model/Test.js'),
config = require('./config.json');
var dbURL = config.medical.url,
dbName = config.medical.name;
function connect(callback) {
db = mongoose.createConnection(dbURL + dbName);
db.on('error', (err) => {
callback(err);
});
db.once('open', function() {
callback();
});
}
function save(data, callback) {
new Test({
data
}).save((err) => {
callback(err);
});
}
module.exports = {
connect: connect,
save: save
}
模型/ Test.js:
var mongoose = require('mongoose');
//Should not get called when proxyquired
module.exports = mongoose.model('Test', mongoose.Schema({
date: Date,
data: String
}));
測試/ test.js:
//...
describe('save', (done) => {
it('Expect to successfully save the Test', (done) => {
var stub = {
Test: function Test() {
this.save = (callback) => {
callback();
}
}
},
test = proxyquire('./../test.js', {
'./model/Test.js': stub.Test
});
test.save({data: 'data'}, (err) => {
try {
expect(err).to.not.be.ok;
done();
} catch(err) {
done(err);
}
});
});
it('Expect to throw any error raised', (done) => {
var stub = {
Test: function Test() {
this.save = (callback) => {
callback('ERROR');
}
}
},
//This line raise a error because Test is already compiled
test = proxyquire('./../test.js', {
'./model/Test.js': stub.Test
});
test.save({data: 'data'}, (err) => {
try {
expect(err).to.not.be.ok;
done();
} catch(err) {
done(err);
}
});
});
//...
我發現將是一個替代方法proxyquire貓鼬在測試,並嘲笑它,以防止註冊,但它會是很多的代碼,我有其他測試,這個模型得到C調整了4層或5層深度,所以在每個層次上進行素描將非常麻煩,而我可以嘲笑高級功能。
@ S.D .:'noCache'沒有記錄,似乎沒有工作。另外,我想爲其他庫保留'callThru',我只想通過'./model/test.js'阻止調用。 – DrakaSAN
其實'var proxyquire = require('proxyquire')。noPreserveCache()。 noCallThru();'。我假設你需要每個測試文件()proxyquire,所以你可以使用'noCallThru()'只用於'test.js'文件。 –
不幸的是,我已經使用'.noPreserveCache',這樣我就可以在每次測試中重新生成我的模塊。奇怪的是:使用全局'noCallThru'工作,但試圖使用僅模塊版本(在proxyquire調用中'@noCallThru:true')不。 – DrakaSAN