我正在尝试为角度服务编写一些单元测试,允许将更改发布到列表中。该类实例化另一个工厂,该工厂保存列表并执行大部分api请求。要测试一些代码,我只需要在伪数据中设置Factory.pk
的值,但我无法弄清楚如何做到这一点。我不一定需要监视它,只是设定它的价值。
代码类似:
// constructor of service
function publishService (ListFactory) {
var _PublishFactory = new ListFactory(),
item_pk: _PublishFactory.item_pk,
setItemPk: setItemPk
};
// . . . code I'm trying to test:
function setItemPk(pk) {
// this SHOULD set _PublishFactory.item_pk;
return _PublishFactory.setItemPk(pk);
}
function addItem(item) {
item_pk = _PublishFactory.pk;
// do things with the list/and whatever here
}
// test:
describe('test', function () {
var publish,
mock;
beforeEach(module('app'));
beforeEach(function() {
inject(function(publish) {
publishService = publish;
});
inject(function($injector) {
mock = $injector.get('ListFactory');
});
it('should addItem', function() {
spyOn(mock.prototype, 'setItemPk').and.returnValues(0, 1);
publishService.setItemPk(0);
publishService.setItemPk(1);
publishService.addItems(data[0]);
publishService.addItems(data[1]);
});
});
});
我遇到的问题是,当我在测试中publishService.addItem
时,_PublishFactory.item_pk
为undefined
,即使它在publishService.setItemPk
中设置正确。如果我在那里放一些日志,看起来这应该有效。
我试图弄清楚每个mock
调用的顶部是否只能addItem
_PublishFactory.pk值,但它是属性,而不是函数。我不需要监视它,我只需要设置它。当我尝试设置它时,我从Jasmine得到一个只读错误。
THX