【发布时间】:2017-10-19 08:10:05
【问题描述】:
我在编写单元测试用例时尝试使用 Sinon 来模拟依赖关系。我遇到了一些问题,但最终成功了。但它的工作方式对我来说真的很奇怪。
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(data);
到
var emp = new Employee(mockData);
它给出了这个错误:
TypeError: this._data.getName 不是函数
我以前在 C# 中使用过模拟。但是在那里我将模拟对象传递给了构造函数。不是实际的对象。
有人可以帮助我理解Sinon嘲笑这种行为的原因吗?
【问题讨论】:
标签: javascript unit-testing ecmascript-6 mocking sinon