我在方法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/