如何使用Jasmine和Blanket.js测试并获得ajax请求的完整代码覆盖率,并且已完成并失败jQuery ajax请求的回调?



所以我有这样的东西:

var Utils = {};
Utils.genericAddRowPost = function(url) {
    return $.post(url);
};
Utils.genericAddRow = function(dataSource, url) {
    genericAddRowPost(url).done(function(data, textStatus, jqXHR) {
        // add on to dataSource and other stuff
    }).fail(function (jqXHR, textStatus, errorThrown) {
        //handle error
    });
};

我试图使用jasmine和blanket测试并实现100%的代码覆盖率,但我似乎无法模拟/执行完成和失败处理程序。如有任何帮助,我们将不胜感激。如果可能的话,我宁愿不必对发布的任何代码进行重组。

使用Jasmine,您应该能够监视ajax调用并模拟成功和失败的情况。

类似这样的东西:

describe("my tests", function () {
    beforeEach(function () {
        spyOn(jQuery, "ajax");
    });
    it("should handle success", function () {
        genericAddRow(a, b);
        // call the success callback
        $.ajax.mostRecentCall.args[1].success(data, textStatus, jqXHR);
        // do your tests here
    });
    it("should handle failure", function () {
        genericAddRow(a, b);
        // call the success callback
        $.ajax.mostRecentCall.args[1].error(jqXHR, textStatus, errorThrown);
        // do your tests here
    });
});

下面是我所做的:

it('Verify Utils.genericAddRow', function () {
    var wasSuccessful = false;
    mockObj = {
        data: ko.observableArray([{}])
    };
    // spy on genericAddRowPost that is called inside this test function
    spyOn(Utils, "genericAddRowPost").andReturn({
        done: function (callback) {
            callback({});
            wasSuccessful = true;
            return this;
        },
        fail: function (callback) {
            return this;
        }
    });
    // Call our test function and make first set of expectations
    Utils.genericAddRow(mockObj, 'fakeUrl');
    expect(Utils.genericAddRowPost).toHaveBeenCalledWith('fakeUrl');
    expect(wasSuccessful).toBeTruthy();
    // Override original spy implementations
    Utils.genericAddRowPost().done = function (callback) {
        return this;
    };
    Utils.genericAddRowPost().fail = function(callback) {
        callback(null, null, 'testError');
        wasSuccessful = false;
        return this;
    };
    // Call our test function and make second set of expectations
    Utils.genericAddRow(mockObj, 'anotherFakeUrl');
    expect(Utils.genericAddRowPost).toHaveBeenCalledWith('anotherFakeUrl');
    expect(wasSuccessful).toBeFalsy();
});

我将编辑我的问题,以反映genericAddRowgenericAddRowPost都是存在于Utils对象文字上的函数。

相关内容

  • 没有找到相关文章

最新更新