2016-11-14 3 views
1

Я пытаюсь использовать Sinon.js, чтобы заглушить конструктор модели моей модели Student Mongoose.Как заглушить конструктор модели Mongoose

var Student = require('../models/student'); 

var student = new Student({ name: 'test student' }); // I want to stub this constructor 

Глядя на исходном коде Mongoose, Model наследует свой прототип из Document, который вызывает функцию Document, так это то, что я пытался, чтобы STUB конструктора. Тем не менее, мой заглушка никогда не называется.

sinon.stub(Student.prototype__proto__, 'constructor',() => { 
    console.log('This does not work!'); 
    return { name: 'test student' }; 
}); 

createStudent(); // Doesn't print anything 

Благодарим за понимание.

EDIT: Я не могу установить Student() в качестве заглушки, потому что я также закрываю Student.find() в другом тесте. Таким образом, мой вопрос по существу «как я должен заглушить Student() и Student.find() в то же время?»

ответ

2

Это, безусловно, может быть сделано только с помощью силона, но это будет очень зависеть от того, как работает lib, и не будет чувствовать себя в безопасности и обслуживании.

Для зависимостей, которые трудно подделывать напрямую, вы должны взглянуть на rewire или proxyquire (я использую rewire, но вы можете иметь выбор), чтобы выполнить «переключение обезьян».

Вы будете использовать rewire, как require, но в нем есть сахар. Пример:

var rewire = require("rewire"); 
var myCodeToTest = rewire("../path/to/my/code"); 

//Will make 'var Student' a sinon stub. 
myCodeToTest.__set__('Student', sinon.stub().returns({ name: 'test'})); 

//Execute code 
myCodeToTest(); // or myCodeToTest.myFunction() etc.. 

//assert 
expect... 

[EDIT]

"как я студент заглушки() и Student.find() в то же самое время?"

//Will make 'var Student' a sinon stub. 
var findStub = sinon.stub().returns({}); 
var studentStub = sinon.stub().returns({find: findStub}); 
myCodeToTest.__set__('Student', studentStub); 
+0

Спасибо Борис. Вы можете увидеть мое редактирование выше? – 2tsai

+0

@ 2tsai Это сделано;) –

Смежные вопросы