代码之家  ›  专栏  ›  技术社区  ›  pjmorse

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

  •  1
  • pjmorse  · 技术社区  · 10 年前

    我们正在使用 rails-csrf 在我们的ember cli应用程序中。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 .

    我不明白的是,如何确保这个代码片段——假装模拟的配置——正常工作。我已将其安装在 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中处理此问题的可用工具发生了重大变化。)

    1 回复  |  直到 4 年前
        1
  •  1
  •   pjmorse    10 年前

    我将我们的应用程序从ember cli 0.1.12和ember 1.8.1更新为ember cli 0.2.0和ember 1.10.0。 我还将Pretender更新为0.6.0(ember-cli伪装程序包安装了0.1.0)。 这本身并没有解决任何问题,但确实导致了集成测试失败的显著变化。现在,由于我没有为数据请求定义处理程序,所以假装器拦截了数据请求并返回了一个错误。

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

    因此,问题不再是Ember,而是我对伪装者的配置。一旦我模拟了对API的数据请求,我们就开始运行了。

    tl;医生确保你有最新版本的伪装者。