我们在ember-cli应用中使用rails-csrf。 rails-csrf says上的自述文件:
确保模拟对csrf服务器端点的调用。否则,您的测试将失败
浏览器控制台中的
"error while processing route: [route]"
消息。例如:
server = new Pretender(function() {
this.get('/csrf', function(request) {
return [200, {"Content-Type": "application/json"},
JSON.stringify({
"authenticity_token": "token"
})
];
});
});
我理解这里的问题(我们的集成测试确实显示了这个错误),我理解Pretender如何解决它。我通过ember-cli-pretender安装了Pretender。
我不明白的是如何确保此代码段 - Pretender mock的配置 - 正在运行。我将它安装在集成测试模块的setup
块中,然后调用它,但错误仍然存在且测试仍然没有通过。
这是当前的非工作状态:
module('Integration test', {
setup: function() {
App = startApp();
var server = new Pretender(function() {
this.get('/our/api/for/csrf', function(request) {
return [200, {"Content-Type": "application/json"},
JSON.stringify({
"authenticity_token": "token"
// I've also tried putting a real token from the server here instead of "token"
})
];
});
});
},
teardown: function() {
Ember.run(App, App.destroy);
}
});
模拟器被调用,但无论它返回什么,对于rails-csrf来说显然是不够的。看起来应用程序路由中的beforeModel
调用正在返回一个promise;它不清楚是否有预期和正在解决。
(这个问题表面上与this older one类似,但在Ember中处理此问题的可用工具发生了重大变化。)
答案 0 :(得分:1)
我将我们的应用程序从ember-cli 0.1.12和ember 1.8.1更新为ember-cli 0.2.0和ember 1.10.0。 我还将Pretender更新为0.6.0(ember-cli-pretender软件包安装0.1.0)。这本身并没有解决任何问题,但确实导致了集成方式的改变测试失败。现在,Pretender正在拦截数据请求并返回错误,因为我没有为它们定义处理程序。
错误:Pretender拦截了GET / our / api / data /:id,但没有为此类请求定义处理程序
所以问题不再是Ember,而是我的Pretender配置。一旦我模拟了对API的数据请求,我们就开始运行了。
tl; dr确保您拥有最新版本的Pretender。