我在方法loadComponent中有以下ajax调用

function loadComponent( url, success ) {
    $.ajax({
      accepts: "text/html"
      url: url,
      success: success
    });
}


我如何验证“ text / html”是否正确传递到了sinon假服务器?

(请注意,我没有正确使用“接受”,因此内容类型将不会随ajax调用一起发送)

伪代码如下:

test( "testing if text/html was sent", function() {
    var server = sinon.fakeServer.create();
    loadComponent( "/url" );
    // How do I make this check ????
    ok( server.wasCalledWithContentType( "text/html" ) );
})

最佳答案

使用jQuery设置请求标头

jQuery文档对accepts参数的用法并不直观。接受头是通过设置dataType参数来控制的。如果要text/html,请将dataType设置为html

$.ajax({
    dataType: "html",
    url: "/foo"
});

Accept: text/html, */*; q=0.01


使用accepts参数,您可以为给定的数据类型自定义标题的内容:

$.ajax({
    dataType: "html",
    accepts: { html: "text/foobar" },
    url: "/foo"
});

Accept: text/foobar, */*; q=0.01


使用Sinon和Jasmine测试请求标头

现在我们已经了解了$ .ajax的工作原理。 Sinon fakeserver使用server.requests[0].requestHeaders请求标头。
下面是用Jasmine和Sinon编写的示例测试套件。对于实时测试,请检查JSFiddle

describe("Fake server", function() {
    "use strict";

    var server;

    beforeEach(function() {
        server = sinon.fakeServer.create();
        server.autoRespond = true;

        server.respondWith("GET", "/foo",
                          [200, {"Content-Type": "application/json"},
                           '{"message":"foo"}']);
    });

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

    it("accept header should include text/html", function () {
        $.ajax({
            dataType: "html",
            url: "/foo"
        });

        var accept = server.requests[0].requestHeaders.Accept;
        expect(accept).toMatch(/text\/html/);
    });

    it("accept header should include text/foobar", function () {
        $.ajax({
            dataType: "html",
            accepts: { html: "text/foobar" },
            url: "/foo"
        });

        var accept = server.requests[0].requestHeaders.Accept;
        expect(accept).toMatch(/text\/foobar/);
    });

});

关于javascript - 如何测试$ .ajax从sinon假服务器发送的内容类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25281166/

10-12 19:21