【问题标题】:How i can test callback in jasmine我如何在茉莉花中测试回调
【发布时间】:2018-06-23 03:59:08
【问题描述】:

我有类 SomeClass 方法 SomeClass.fetch()

var repository = {
    get: function(obj) {
        //...
    }
};

var cache = false;

var SomeClass = {

    init: function() {
        //...
    },

    fetch: function () {
        var _this = this;

        repository.get({
            method: 'getRecentDialogsList',
            success: function (result) {
                if (!cache) {
                    _this.set(result);
                    _this.sort();
                    _this.trigger('fetch:success', _this);
                }

                _this.trigger('fetch:ajaxSuccess', _this);
            }
        });
    }
}

我如何测试 SomeClass.fetch() 并检查是否已通过参数调用 this.set()this.sortthis.trigger

【问题讨论】:

    标签: javascript unit-testing jasmine


    【解决方案1】:

    你必须使用间谍:

    describe("SomeClass Test", function() {
        it("calls the set() method when fetch is called", function() {
            spyOn(SomeClass, "set");
            SomeClass.fetch();
            expect(SomeClass.set).toHaveBeenCalled();
        });
    });
    

    您甚至可以将被调用的方法(例如,如果需要很长时间才能完成)完全替换为:

    spyOn(SomeClass, "set").and.callFake(function myFakeSet() {
      console.log("I've been called");
    });
    

    【讨论】:

    • 我必须模拟repository.get(),谁在repository.get()中调用成功回调?
    • 我不确定我是否在关注你:你是在问是否必须模拟 repository.get?那么答案是否定的,因为它会调用成功函数,而该函数又会调用SomeClass.set
    猜你喜欢
    • 1970-01-01
    • 2015-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多