我在方法loadComponent
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" ) );
})
答案 0 :(得分:1)
jQuery文档对accepts
参数的使用不直观。通过设置dataType
参数来控制Accept标头。如果您希望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
现在我们已经了解了$ .ajax的工作原理。带有server.requests[0].requestHeaders
的Sinon fakeserver请求标头。
下面是用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/);
});
});
答案 1 :(得分:0)
试试这个:
$.ajax({
url: url,
success: function(response, status, xhr){
var ct = xhr.getResponseHeader("content-type") || "";
if (ct.indexOf('html') > -1) {
//do something
}
}
});
答案 2 :(得分:0)
这可行:
$.ajax({
url: url,
success: success,
dataType: "html"
});
答案 3 :(得分:0)
你想在sinon上的服务器假端验证查询吗?可能是你帮助这样的例子:
server.respondWith(method, model,
(function() {
var answer = [];
if (model.attributes.car_model == "") {
answer = [
404,
{ "Content-Type": "application/json" },
'[{"0":"not car selected"}]'
];
} else {
answer = [
200,
{ "Content-Type": "application/json" },
'[{"0":"good query"}]'
];
}
return answer;
})(model));
在此示例中,模型和模型属性正在验证,但可以根据需要使用这些属性。
答案 4 :(得分:0)
由于缺乏正确的答案,似乎最新的,sinon fakeServer中没有功能允许测试请求中发送的mime类型。