- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在学习测试,所以我使用 karma、karma-jasmine 和 sinon.js 构建了这个简单的示例:我有一个 ajax 请求,成功后它会设置一个全局变量。使用 sinon fakeServer 我伪造响应,如果我手动使用 sinon.server.respond() 函数触发响应,一切都很好。但是将sinon fakeServer更改为autoRespond = true,却没有达到预期的效果。测试失败,因为全局变量仍未定义。在我看来,当设置为 autoRespond = true 时 fakeRequest 不会应答。有人建议为什么吗?谢谢你的帮助。测试代码:
var requestResult; // global variable
function loadFirstData () {
var request = $.ajax( {
url : "/rest/first/",
type : "GET",
timeout : 5000,
dataType: "json"
} );
request.done( function ( data ) {
requestResult = data;
} );
request.fail( function ( jqXHR, textStatus ) {
console.error( "Request failed: " + textStatus );
console.error( "Object: ", jqXHR );
} );
}
测试:
describe( 'Ajax requests', function () {
var xhr;
beforeEach(function() {
xhr = sinon.fakeServer.create();
// this doesn't work
//xhr.autoRespond = true;
xhr.respondWith(
'GET',
'/rest/first/',
function (request) {
request.respond(
200,
{ "Content-Type": "application/json" },
'{ "returnValue": 20.13 }'
);
}
);
xhr.respondWith(
'GET',
'rest/second/',
function (request) {
request.respond(
200,
{ "Content-Type": "application/json" },
'{ "returnValue": 3333 }'
);
}
);
});
afterEach(function() {
xhr.restore();
});
it( 'should get first data', function () {
loadFirstData();
// this works
xhr.respond();
expect( requestResult ).toEqual( { "returnValue": 20.13 } );
} );
} );
最佳答案
我自己找到了答案。 :)sinon fake-server 不会立即响应请求,而是会短暂延迟。所以我必须使用 did() Funktion 异步进行 Jasmine 测试。所以下面的代码可以工作:
describe( 'Ajax requests', function () {
var xhr;
// beforeEach get the jasmine done as argument
beforeEach(function(done) {
xhr = sinon.fakeServer.create();
// autoRespond is set
xhr.autoRespond = true;
xhr.respondWith(
'GET',
'/rest/first/',
function (request) {
request.respond(
200,
{ "Content-Type": "application/json" },
'{ "returnValue": 20.13 }'
);
}
);
xhr.respondWith(
'GET',
'rest/second/',
function (request) {
request.respond(
200,
{ "Content-Type": "application/json" },
'{ "returnValue": 3333 }'
);
}
);
// starts the tests
done();
});
afterEach(function() {
xhr.restore();
});
// the asynchronous test get the jasmie done as argument, as well
it( 'should get first data', function (done) {
loadFirstData();
// delays the expectations check
setTimeout( function() {
expect( requestResult ).toEqual( { "returnValue": 20.13 } );
// says jasmine the test is finished
done();
}, 500);
} );
} );
关于javascript - sinon server.autoRespond,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28702108/
我正在学习测试,所以我使用 karma、karma-jasmine 和 sinon.js 构建了这个简单的示例:我有一个 ajax 请求,成功后它会设置一个全局变量。使用 sinon fakeServ
我正在开发发送数千个 http post 请求的应用程序。我想记录所有响应并在 Fiddler` 的帮助下将它们用作 stub 。 例如(为简单起见,假设产品价格 = productid): 发送请求
是否可以仅使用 FiddlerScript 检查是否启用了 AutoResponder? 我有一些修改请求 header 的代码,但我只希望在 AutoResponder 开启时触发该代码。我查看了
我是一名优秀的程序员,十分优秀!