【问题标题】:Testing error responses with ember-cli-mirage使用 ember-cli-mirage 测试错误响应
【发布时间】:2015-10-07 16:13:12
【问题描述】:

我正在阅读 ember-cli-mirage 的有关创建模拟响应的文档,但不知道如何针对完全相同的请求测试错误响应。例如:

test("I can view the users", function() {
  var users = server.createList('user', 3);

  visit('/users');

  andThen(function() {
    equal( find('li').length, 3 );
    equal( find('li:first').text(), users[0].name );
  });
});

test("I can view the error if viewing the users returns an error", function() {
  // somehow set up an error response (?)   

  visit('/users');

  andThen(function() {
    equal( find('#error').length, 1 );
  });
});

看起来形成响应的唯一方法是在路由中

this.get('/users', function(db, request) {

    if (something based on the request, i guess?) {
      return new Mirage.Response(500, {}, {message: 'Oops! Something bad happenned. :('});
    } else {
        return db.users.insert([
            {name: 'Zelda', age: 142},
            {name: 'Epona', age: 58},
        ]);
    }
});

海市蜃楼建议如何进行此操作?

【问题讨论】:

    标签: ember.js acceptance-testing ember-cli-mirage


    【解决方案1】:

    在测试中,config.js 中定义的路由处理程序被加载,但由于您可以访问server,您实际上可以覆盖这些处理程序。

    在这种情况下我所做的只是为错误状态创建一个临时路由处理程序:

    test("I can view the error if viewing the users returns an error", function() {
      server.get('/users', {errors: ['there was an error']}, 404);
    
      visit('/users');
    
      andThen(function() {
        equal( find('#error').length, 1 );
      });
    });
    

    由于每次测试都会重新实例化服务器,因此此处理程序不会存在于其他测试中。

    还有一个 API 的 PR 允许您编写瞬态路由处理程序,这对于测试您的应用程序是否可以从错误中恢复很有用。

    【讨论】:

    • 太棒了。那么server 是全局定义的吗?
    • 是的,现在它只是一个全球性的。计划使其更加明确
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多