簡體   English   中英

如何存根貓鼬模型構造函數

[英]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的源代碼, ModelDocument繼承其原型,后者調用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM