1

我们在我们的 ember-cli 应用程序中使用rails-csrf 。rails-csrf 上的 README

请务必模拟对 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 模拟的配置 - 正在工作。我将它安装在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应用程序路由中的调用正在返回一个承诺;目前尚不清楚这是否符合预期并得到解决。

(这个问题表面上与这个老问题相似,但是在 Ember 中处理这个问题的可用工具已经发生了显着变化。)

4

1 回答 1

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

错误:伪装者拦截了 GET /our/api/data/:id 但没有为此类请求定义处理程序

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

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

于 2015-03-04T17:45:44.143 回答