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