Я пытаюсь проверить вокруг модели мангуста.Предотвратить проксисервирование для вызова исходного кода?
Я использую 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 mongoose в тесте и издеваться над ним, чтобы предотвратить регистрацию, но было бы много кода, и у меня есть другой тест, где эта модель получает c с 4 или 5 уровнями глубины, поэтому проксиурирование каждого уровня было бы очень громоздким, в то время как я мог бы высмеять функцию более высоких функций.
@ S.D .: 'noCache' не задокументирован и не работает. Кроме того, я хочу сохранить 'callThru' для другой библиотеки, я хочу заблокировать вызов только на../Model/test.js' – DrakaSAN
Его фактически' var proxyquire = require ('proxyquire'). NoPreserveCache(). noCallThru(); '. Я предполагаю, что для каждого требуемого тестового файла() proxyquire вы можете использовать 'noCallThru()' только для файла 'test.js'. –
К сожалению, я уже использую '.noPreserveCache', чтобы я мог регенерировать свои модули в каждом тесте. Странная вещь: использование глобальной работы noCallThru, но попытка использовать только версию модуля ('@noCallThru: true' в вызове proxyquire) нет. – DrakaSAN