我正在为QUnit中的Ember.js应用程序编写集成测试。在测试之前,我想通过向专用测试API发出HTTP请求来播种一些测试数据。我使用jQuery.post
发出POST请求,并使用Ember.RSVP.Promise.cast
将jQuery保证转换为RSVP保证。然而,它似乎永远不会解决。在下面的代码中,它只是挂起。打印字符串"STARTING"
但不会打印"DONE"
或"FAIL"
。
我还尝试创建一个新的RSVP Promise,如"高级用法" http://emberjs.com/api/classes/Ember.RSVP.Promise.html的一部分无济于事(它也被绞死)。如果我不将jQuery承诺包装到RSVP承诺中,它确实可以到达"DONE"
或"FAIL"
。
为什么RSVP Promise没有解决?
function create_teacher() {
var url = "<%= testing_teacher_path %>";
return Ember.RSVP.Promise.cast(
Ember.$.post(
url,
{
user: {
first_name: "John",
last_name: "Doe"
school: "EE3",
email: "john@doe.com",
password: "password"
}
}
)
);
}
module("Teacher Dashboard", {
setup: function() {
console.log("STARTING");
Ember.run(HstryEd, HstryEd.advanceReadiness);
},
teardown: function() {
console.log("TEARING DOWN");
HstryEd.reset();
}
});
asyncTest("Login", function() {
expect(1);
var teacher = create_teacher();
teacher.then(function() {
console.log("DONE");
ok(true, "done");
start();
},
function() {
console.log("FAIL");
ok(false, "fail");
start();
});
});
答案 0 :(得分:2)
这可能与在测试模式下禁用的Ember runloop有关。你签出了ic-ajax
吗? https://github.com/instructure/ic-ajax它以Ember喜欢的形式为您提供承诺风格的jQuery ajax请求,即使在测试中也是如此。我带它进入测试中解决了我的Ember runloop问题,到目前为止已经取得了很好的效果。
或者,您可以尝试将teacher.then(..
包裹在Ember.run
。