使用 ember-cli-mirage 测试错误响应
Posted
技术标签:
【中文标题】使用 ember-cli-mirage 测试错误响应【英文标题】:Testing error responses with 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,
]);
);
海市蜃楼建议如何进行此操作?
【问题讨论】:
【参考方案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
是全局定义的吗?
是的,现在它只是一个全球性的。计划使其更加明确以上是关于使用 ember-cli-mirage 测试错误响应的主要内容,如果未能解决你的问题,请参考以下文章
Ember 数据模型中的计算属性不适用于 ember-cli-mirage 模型
Ember Mirage 没有将模型作为 ember 对象传递