[英]Unit Testing Factories Jasmine-Sinon
我有一个有吸气器和吸气器的工厂
.factory('myService', function() {
var car = null;
return {
car: car,
get: function get() {
return car;
},
set: function set(newCar) {
car = newCar;
}
};
});
我写测试,但我不能调用set
方法,并已实际设置car
到newCar
myService.set = sinon.spy();
myService.get = sinon.spy()
it('should set car to new car', function () {
var newCar = ['a','b','c'];
expect(myService.car).toEqual(null); //pass
myService.set(newCar);
dump(myService.car); //null
expect(myService.set).toHaveBeenCalledWith(newCar);//pass
expect(myService.get).toHaveReturned(newCar);//fail
});
关于我在这里做错的任何建议吗?
这里还有更多问题。
一种是.car
属性将始终为null。
var car = null;
return {
car: car,
get: function get() {
return car;
},
set: function set(newCar) {
car = newCar;
}
};
在这里,您使用car
初始化它为null。 他们之间将没有参考。 由于您永远不会在对象上更改该属性,因此它将始终为null:
dump(myService.car); //null
您可能会执行以下操作:
return {
car: null,
get: function get() {
return this.car;
},
set: function set(newCar) {
this.car = newCar;
}
};
但是与此有关,您稍后可能会遇到一些与this
相关的问题。 如果您有吸气剂,为什么要尝试暴露car
?
另一件事是,您将整个get
和set
函数替换为:
myService.set = sinon.spy();
myService.get = sinon.spy();
兴农什么都不知道关于你的原始get
和set
。
您应该这样做: sinon.spy(myService, 'set');
因此,sinon可以在保留原有功能的同时将其功能与间谍结合起来。 查看Sinon文档
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.