按照此处的教程和其他线程,我无法在具有异步代码时运行测试。以下是我一直在尝试测试的内容:http://emberjs.jsbin.com/xacurasi/1/edit?html,js,output 以及入门工具包中附带的测试。当使用 ?test
参数打开时,应用程序窗口(编辑:显示实际应用程序的框架,而不是 qunit 测试页面)显示空白页面。
这是我唯一的异步代码:
App.IndexRoute = Ember.Route.extend({
model: function() {
var promise;
Ember.run(function() {
promise = Em.$.getJSON('http://123.345.456.78/ajax/server.php');
});
return promise;
}
});
我进入控制台时出错:
未捕获错误:断言失败:您已打开测试模式,这会禁用运行循环的自动运行。您需要将任何具有异步副作用的代码包装在 Ember.run
这很令人困惑,因为我确实将我的异步代码包装在 Ember.run(function() {//my code here});
最佳答案
编辑:
那个错误解决了问题。该错误并不意味着对 getJSON
的调用应该在 Ember.run
中,它意味着 getJSON
调用的回调应该是在 Ember.run
中。这是 Ember 运行循环工作方式的一个怪癖。该代码在正常操作中运行良好,但在测试模式下运行不佳。关于它有一个简短的讨论here .您需要做的是提供对 getJSON
函数的回调。像这样的东西应该可以解决它(并使您清楚地知道您在做什么)。
model: function() {
return new Ember.RSVP.Promise(function(resolve) {
Ember.$.getJSON('http://foobar', function(data) {
Ember.run(null, resolve, data);
});
});
}
或者您可以使用我链接到的线程底部的小型库。但我想我会为您提供一个仅使用 Ember.js 的解决方案,以防万一。
关于javascript - Emberjs - 如何测试 promise 和其他异步行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22160040/