用sinonjs假ajax调用

时间:2016-12-09 19:37:31

标签: javascript automation protractor sinon

我正在尝试使用量角器自动化端到端测试,并且我正在使用sinonjs设置fakeServer来响应按钮点击触发的某些ajax调用(不是全部)。

我陷入困境,不知道如何解决这个问题并成为自动化新手我不确定自己是否走在正确的道路上。

var sinon = require('sinon');
describe("SinonFakeServerTest", function() {
    var fakeServer;
    beforeEach(function () {
        fakeServer = sinon.fakeServer.create();
        fakeServer.autoRespond = true;

        var data = {key1: 'xyz', key2: 'abc'};
        var response = [ 200, { "Content-Type": "application/json" }, data ];
        fakeServer.respondWith( '/abc/xyz/*', response );
    }

    afterEach(function () {
        fakeServer.restore();
    }

    it("should fake a ajax request", function () {
        // click on this button triggers ajax call..
        element(by.css('.take-button')).click();
        //should show fake data on ui
    });
});

这是按钮点击控制器和模型的生产代码

'.take-button click' : function(el, ev) {
    model.getData(listParams, this.proxy('setUpData'));
},

getList : function(params, success) {
    $.ajax({
        url : '/abb/xyz/getAll.htm',
        dataType : 'json',
        type : "GET",
        data : {
            params : params
        },
        success : success
    });
}

2 个答案:

答案 0 :(得分:0)

当生产代码使用JQuery进行AJAX调用时,我没有使用Sinon的fakeServer功能成功伪造服务器。

我建议为$.ajax尝试简单的Sinon存根。 sinonjs.org网站上有一个示例(请查看Testing Ajax部分):

after(function () {
    // When the test either fails or passes, restore the original
    // jQuery ajax function (Sinon.JS also provides tools to help
    // test frameworks automate clean-up like this)
    jQuery.ajax.restore();
});

it("makes a GET request for todo items", function () {
    sinon.stub(jQuery, "ajax");
    getTodos(42, sinon.spy());

    assert(jQuery.ajax.calledWithMatch({ url: "/todo/42/items" }));
});

答案 1 :(得分:0)

我在没有sinonjs的量角器中解决了上述问题。 我使用mockjax来破解选定的ajax调用,并通过browser.executeScript()

注入此脚本