簡體   English   中英

單元測試工廠Jasmine-Sinon

[英]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方法,並已實際設置carnewCar

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

另一件事是,您將整個getset函數替換為:

myService.set = sinon.spy();
myService.get = sinon.spy();

興農什么都不知道關於你的原始getset

您應該這樣做: sinon.spy(myService, 'set');

因此,sinon可以在保留原有功能的同時將其功能與間諜結合起來。 查看Sinon文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM