我在哪里使用Pretender来使用rails-csrf启用Ember Qunit集成测试?

时间:2015-02-26 14:49:23

标签: ember.js ember-cli ember-qunit

我们在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中处理此问题的可用工具发生了重大变化。)

1 个答案:

答案 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。