gpt4 book ai didi

javascript - Emberjs - 如何测试 promise 和其他异步行为?

转载 作者:行者123 更新时间:2023-11-29 10:15:47 26 4
gpt4 key购买 nike

按照此处的教程和其他线程,我无法在具有异步代码时运行测试。以下是我一直在尝试测试的内容: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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com