为了在我的前端测试一些Timeout案例,我想在海市蜃楼中引入人为延迟,同时只响应某些特定请求,并立即响应所有其他情况。
我正在写这样的幻影场景
export default function () {
this.post('/ebm-anp/api/v1/json/sessions', (schema, request) => {
const req = JSON.parse(request.requestBody);
if ((req.card.value === '12345678' || req.card.value === '12345678-encrypted-value') && req.password === 'abc') {
return new Response(200, {'X-Auth-Token': '2704412f-7820-4431-86c1-1234567800'}, successResponse);
}else if (..){
}
}
}
在这篇文章中,Introduce momentary delays in ember-cli-mirage Sam建议使用{timing:400};与调用,在我的示例中使用时看起来像以下。
export default function () {
this.post('/ebm-anp/api/v1/json/sessions', (schema, request) => {
const req = JSON.parse(request.requestBody);
if ((req.card.value === '12345678' || req.card.value === '12345678-encrypted-value') && req.password === 'abc') {
return new Response(200, {'X-Auth-Token': '2704412f-7820-4431-86c1-1234567800'}, successResponse);
}else if (..){
}
},{timing: 400};
}
这基本上会导致所有到达此端点的测试用例的调用延迟 - 不为我的目的服务。
有没有我可以重构我的幻影设置,以便我可以设置 时间(延迟)配置仅适用于某些情况,并使所有其他情况正常。
答案 0 :(得分:1)
如果您只想在单一测试中引入延迟,您可以随时覆盖测试中的路由处理程序,包括传递计时选项:
test('I see a loading spinner when the sessions endpoint is slow', function(assert) {
server.post('/ebm-anp/api/v1/json/sessions', (schema, request) => {
const req = JSON.parse(request.requestBody);
if ((req.card.value === '12345678' || req.card.value === '12345678-encrypted-value') && req.password === 'abc') {
return new Response(200, {'X-Auth-Token': '2704412f-7820-4431-86c1-1234567800'}, successResponse);
} else if (..) {
//
}
}, { timing: 400 });
visit('/');
// do more things
}
基本上,您只是为了这个测试而重写这条特定的路线。每次新测试运行时,都会重新加载config
中的路由,因此将重置此路由的时间。
如果你想分享路线处理程序,这样你就不必在两个地方重新定义整个东西,只需将它贴在一个合理的文件中
// mirage/route-handlers/sessions.js
export default (schema, request) => {
const req = JSON.parse(request.requestBody);
if ((req.card.value === '12345678' || req.card.value === '12345678-encrypted-value') && req.password === 'abc') {
return new Response(200, {'X-Auth-Token': '2704412f-7820-4431-86c1-1234567800'}, successResponse);
} else if (..) {
//
}
});
然后像
一样导入它import sessionsRouteHandler from 'my-app/mirage/route-handlers/sessions';
并像
一样使用它// mirage/config.js
this.post('/ebm-anp/api/v1/json/session', sessionsRouteHandler);
// your-test.js
test('I see a loading spinner when the sessions endpoint is slow', function(assert) {
session
server.post('/ebm-anp/api/v1/json/sessions', sessionsRouteHandler, { timing: 400 });
visit('/');
// do more things
}