No *_*ses 5 javascript unit-testing ember.js
我正在使用Ember.js异步路由指南中描述的功能.也就是说,我从异步路由的model
钩子返回一个promise,以延迟转换到路由,这可以按预期工作.
但是,它打破了我的应用程序单元测试的能力.当我运行我的测试时,我在控制台中收到以下错误:
断言失败:您已打开测试模式,该模式禁用了运行循环的自动运行.您需要在Ember.run中包含任何带有异步副作用的代码
我用异步副作用包装了所有代码Ember.run
,但我仍然得到错误.
这是一个带有最小例子的JSFiddle:http://jsfiddle.net/nRHfv/3/
该示例基于Ember入门套件及其附带的测试运行器.它有一个工作的异步索引路由.如果设置testing: false
到true
的_config
物体(10号线),这将打开测试套件,你应该看到在您的控制台上面的错误.
我的异步路由model
挂钩在第38行.我已经尝试了几种包含代码的变体Ember.run
.例如,我已经尝试在内部定义promise Ember.run
,在里面执行所有异步内容,然后在外面返回promise.我也试过包装then()
in 的内容Ember.run
,就像我在其他一些答案上看到的那样(例如ember集成测试错误.处理异步副作用).
我究竟做错了什么?
经过更多搜索,我在EmberSherpa的 Ember.js 讨论论坛上找到了关于Guide: Asynchronous side-effects in test 的值得注意的评论:
顺便说一句,今天发布了一个库,旨在替换 $.getJSON 并使此过程变得更加容易 https://github.com/instruct/ic-ajax
我尝试了 ic-ajax 库,它成功了!在深入了解它在做什么之后,我应该如何编写异步路由的model
钩子:
var promise = new Ember.RSVP.Promise(function (resolve, reject) {
Ember.$.ajax({
url: '/echo/json/',
type: 'POST',
data: {
json: '{ "text": "Hello from Ember.js" }',
delay: 0.25
},
dataType: 'json',
success: function (response, textStatus, jqXHR) {
Ember.run(null, resolve, response);
}
})
});
return promise.then(function (response) {
return response;
});
Run Code Online (Sandbox Code Playgroud)
我想 jQuery Promise 与测试时不可互换Ember.RSVP.Promise
(但它们用于触发异步路由操作)。
这是更新后的 JSFiddle,具有异步路由和测试工作:http://jsfiddle.net/nRHfv/5/
我想我会坚持使用ic-ajax,因为代码更简洁,并且在测试时能够加载静态设备而不是实时 API 端点。
归档时间: |
|
查看次数: |
950 次 |
最近记录: |