[英]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.