[英]How to stub Mongoose model constructor
我正在嘗試使用Sinon.js存根我的Student
Mongoose模型的模型構造函數。
var Student = require('../models/student');
var student = new Student({ name: 'test student' }); // I want to stub this constructor
查看Mongoose的源代碼, Model從Document繼承其原型,后者調用Document
函數,因此這是我為存根構造函數而嘗試的方法。 但是,我的存根永遠不會被調用。
sinon.stub(Student.prototype__proto__, 'constructor', () => {
console.log('This does not work!');
return { name: 'test student' };
});
createStudent(); // Doesn't print anything
感謝您的見解。
編輯:我不能直接將Student()
設置為存根,因為我也在另一個測試中存根Student.find()
。 所以我的問題本質上是“如何同時對Student()
和Student.find()
進行存根?”
當然,只能使用sinon來完成,但這將非常依賴lib的工作方式,並且不會感到安全和可維護。
對於依賴關系是很難直接嘲笑,你應該看看聯控或proxyquire (我用的重新連接,但你可能希望有一個選擇)做“猴修補”。
您將像require
一樣使用rewire
,但是它有一些糖。 范例:
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...
[編輯]
“如何同時對Student()和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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.