繁体   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