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

Where do I use Pretender to enable Ember Qunit integration tests with rails-csrf?

我们正在使用 rails-csrf in our ember-cli app. The README on rails-csrf says:

Be sure to mock out the call to the csrf server endpoint. Otherwise your tests will fail with

"error while processing route: [route]"

messages in the browser console. For example:

server = new Pretender(function() {
  this.get('/csrf', function(request) {
    return [200, {"Content-Type": "application/json"},
      JSON.stringify({
        "authenticity_token": "token"
      })
    ];
  });
});

我理解这里的问题(我们的集成测试确实显示了这个错误)并且我理解 Pretender solves it. I've got Pretender installed via ember-cli-pretender

我不明白的是如何确保此代码片段(Pretender 模拟的配置)正常运行。我将它安装在集成测试模块的 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 调用正在返回一个承诺;目前尚不清楚这是否符合预期并得到解决。

(此问题表面上与 this older one 类似,但 Ember 中用于处理此问题的可用工具已发生重大变化。)

我将我们的应用程序从 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 正在拦截数据请求并返回错误,因为我没有为它们定义处理程序。

Error: Pretender intercepted GET /our/api/data/:id but no handler was defined for this type of request

所以问题不再是 Ember,而是我的 Pretender 配置问题。一旦我模拟了对 API 的数据请求,我们就关闭了 运行.

tl;dr 请确保您拥有最新版本的 Pretender。