在Jasmine中设置mock的属性值

时间:2016-12-21 19:56:33

标签: angularjs unit-testing jasmine

我正在尝试为角度服务编写一些单元测试,允许将更改发布到列表中。该类实例化另一个工厂,该工厂保存列表并执行大部分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_pkundefined,即使它在publishService.setItemPk中设置正确。如果我在那里放一些日志,看起来这应该有效。

我试图弄清楚每个mock调用的顶部是否只能addItem _PublishFactory.pk值,但它是属性,而不是函数。我不需要监视它,我只需要设置它。当我尝试设置它时,我从Jasmine得到一个只读错误。

THX

0 个答案:

没有答案