admin管理员组文章数量:1188225
I'm getting acquainted with Jasmine (/) and found something rather baffling:
it("should be able to send a Ghost Request", function() {
var api = fm.api_wrapper;
api.sendGhostRequest(function(response) {
console.dir('server says: ', response);
});
expect(true).toEqual(false);
});
Fails as expected.
However, moving the expect call inside the callback:
it("should be able to send a Ghost Request", function() {
var api = fm.api_wrapper;
api.sendGhostRequest(function(response) {
console.dir('server says: ', response);
expect(true).toEqual(false);
});
});
Somehow passes :O
After some debugging: api.sendGhostRequest() does an asynchronous ajax request, and jasmine rushes past before the request has completed.
Hence the question:
How do I get jasmine to wait for ajax execution before ascertaining the test result?
I'm getting acquainted with Jasmine (http://pivotal.github.com/jasmine/) and found something rather baffling:
it("should be able to send a Ghost Request", function() {
var api = fm.api_wrapper;
api.sendGhostRequest(function(response) {
console.dir('server says: ', response);
});
expect(true).toEqual(false);
});
Fails as expected.
However, moving the expect call inside the callback:
it("should be able to send a Ghost Request", function() {
var api = fm.api_wrapper;
api.sendGhostRequest(function(response) {
console.dir('server says: ', response);
expect(true).toEqual(false);
});
});
Somehow passes :O
After some debugging: api.sendGhostRequest() does an asynchronous ajax request, and jasmine rushes past before the request has completed.
Hence the question:
How do I get jasmine to wait for ajax execution before ascertaining the test result?
Share Improve this question asked Feb 28, 2013 at 17:26 Val RedchenkoVal Redchenko 5811 gold badge8 silver badges21 bronze badges 1- 1 With Jasmine 2.0 you just call it("desc",function(done){... done(); ...}). Just saying, because this thread is high in google results :) – pkopac Commented Apr 12, 2016 at 13:33
3 Answers
Reset to default 15Edit for Jasmine 2
Asynchronous tests have become much simpler in Jasmine 2. Any test that needs to handle asynchronous code can be written with a callback which will indicate the completion of the test. See the Jasmine 2 docs under the header Asynchronous Support
it('should be able to send a ghost request', (done) => {
api.sendGhostRequest((response) => {
console.log(`Server says ${response}`);
expect(true).toEqual(false);
done();
});
});
Jasmine 1
Have a look at waitsFor() and runs() on the Jasmine site under the header Asynchronous Support.
Use of runs and waitsfor should force Jasmine to wait for the ajax call to finish or for some timeout.
The code would look like:
it("should be able to send a Ghost Request", function() {
runs(function() {
api.sendGhostRequest(function(response) {
console.dir('server says: ', response);
flag = true;
});
}, 500);
waitsFor(function() {
return flag;
}, "Flag should be set", 750);
runs(function() {
expect(true).toEqual(false);
});
}
In which case the expect would fail.
As @pkopac commented, runs()
and waitsFor()
have been deprecated in v2 favour of using a done()
callback as documented: https://jasmine.github.io/2.0/introduction.html#section-Asynchronous_Support
it("should be able to send a Ghost Request", function(done) {
var api = fm.api_wrapper;
var success = function(response) {
console.dir('server says: ', response);
expect(response).toEqual('test response')
done();
};
api.sendGhostRequest(success);
});
Look into runs() and waitfor()
Specifically you can call waitfor to check that the callback has run in some fashion (maybe using a boolean as a check?) and then run the expect afterwards.
runs allows you to wait until the waitfor has completed.
async jasmine documentation
本文标签: javascriptjasminejs expect() does not work inside an asynchronous callbackStack Overflow
版权声明:本文标题:javascript - jasmine.js expect() does not work inside an asynchronous callback - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1738388506a2084308.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论