2016-11-14 5 views
1

私はStudent MongooseモデルのモデルコンストラクタをスタブするためにSinon.jsを使用しようとしています。マングースのソースコードを見てみるとMongooseモデルコンストラクタをスタブする方法

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

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

ModelDocument関数を呼び出すDocumentからそのプロトタイプを、継承するので、これは、私は、コンストラクタをスタブするためにしようとしたものです。しかし、私のスタブは決して呼ばれません。

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(私は再配線を使用しますが、選択肢があります)で "モンキーパッチ"を実行する必要があります。

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... 

[EDIT]

は、 "どのように私は同時に学生()とStudent.findを()スタブのですか?"

+0

ありがとうございます。上記の私の編集を見ていただけますか? – 2tsai

+0

@ 2tsaiそれは終わった;) –

関連する問題