ユニットテストケースの作成中にSinonを使用して依存関係をモックしようとしています。私はいくつかの問題に直面したが、ついにそれを機能させた。しかし、それが働いている方法は本当に私にとって奇妙に見えます。ユニットテストで実際のオブジェクトを使用しますが、Sinon MockedオブジェクトはJavascript ES6にありません
クラスEmployee
はクラスData
に依存し、したがってData
オブジェクトはクラスEmployee
のコンストラクタに依存性注入されます。ここで
は動作するコードです:
class Data{
getName(){
return "Ram";
}
}
class Employee{
constructor(data){
this._data = data;
}
getName(){
return this._data.getName();
}
}
describe('canary suite', function(){
it('canary test', function(){
var data = new Data();
var mockData = sinon.mock(data);
mockData.expects('getName').returns('Raj');
var emp = new Employee(data); //here is the deviation.
expect(emp.getName()).equals('Raj');
mockData.verify();
mockData.restore();
});
});
私はコードでこの行を変更した場合:
var emp = new Employee(mockData);
に
var emp = new Employee(data);
を、それは、このエラーを与える:
TypeError: this._data.getName is not a function
私はC#でモックを扱っています。しかしそこでは、私は嘲笑されたオブジェクトをコンストラクタに渡しました。実際のオブジェクトではありません。
誰かがSinon Mockingでこの動作の理由を理解するのを助けることができますか?