预计间谍,却得到了功能(Expected a spy, but got Function)

2019-06-27 05:23发布

我想实现这个模块(2)测试(1)。
我的目的是检查,如果在触发特定事件的集合被取出。
你可以从我的(2)我得到的消息看注释Error: Expected a spy, but got Function.
该模块工作,但测试失败。 有任何想法吗?


(1)

// jasmine test module

describe('When onGivePoints is fired', function () {
    beforeEach(function () {
        spyOn(this.view.collection, 'restartPolling').andCallThrough();
        app.vent.trigger('onGivePoints');
    });
    it('the board collection should be fetched', function () {
        expect(this.view.collection.restartPolling).toHaveBeenCalled();
       // Error: Expected a spy, but got Function.
    });
});

(2)

// model view module
return Marionette.CompositeView.extend({
    initialize: function () {
        this.collection = new UserBoardCollection();
        this.collection.startPolling();
        app.vent.on('onGivePoints', this.collection.restartPolling);
    },
    // other code
});

Answer 1:

你需要进入实际的方法,在这种情况下是在原型。

describe('When onGivePoints is fired', function () {
    beforeEach(function () {
        spyOn(UsersBoardCollection.prototype, 'restartPolling').andCallThrough();
        app.vent.trigger('onGivePoints');
    });
    it('the board collection should be fetched', function () {
        expect(UsersBoardCollection.prototype.restartPolling).toHaveBeenCalled();
    });
});

刺探原型是一个很好的技巧,当你不能去,你想窥探的实际情况下,你可以使用。



Answer 2:

我也收到同样的问题,但我通过传递参数的函数调用解决它。 然后,你必须这样写在你的测试用例it

var data = {name:"test"}
spyOn(UsersBoardCollection.prototype, "restartPolling").and.callThrough();
UsersBoardCollection.prototype.restartPolling(data);
expect(UsersBoardCollection.prototype.restartPolling).toHaveBeenCalled();


Answer 3:

我有这个错误,因为我有兴农的两个版本加载,或者我可能没有被正确初始化兴农,茉莉。 当我明确地加载兴农,然后兴农茉莉在我的规格设置,它开始正常运行。



文章来源: Expected a spy, but got Function