使用 ember-cli-mirage 测试错误响应
Testing error responses with ember-cli-mirage
我正在通读 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},
]);
}
});
mirage 建议如何进行此操作?
在测试中,加载了 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 );
});
});
由于每次测试都会重新实例化服务器,因此此处理程序将不会存在于其他测试中。
还有一个 PR 的 API 允许您编写瞬态路由处理程序,这对于测试您的应用程序是否可以从错误中恢复很有用。
我正在通读 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},
]);
}
});
mirage 建议如何进行此操作?
在测试中,加载了 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 );
});
});
由于每次测试都会重新实例化服务器,因此此处理程序将不会存在于其他测试中。
还有一个 PR 的 API 允许您编写瞬态路由处理程序,这对于测试您的应用程序是否可以从错误中恢复很有用。