Ember mirage 仅在特定情况下引入延迟
Ember mirage introduce delay in specific cases only
为了在我的前端测试一些超时情况,我想在 mirage 中引入人为延迟,同时仅响应某些特定请求并立即响应所有其他情况。
我正在写这样的幻影场景
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 (..){
}
}
}
在此post、
山姆建议使用 {timing: 400};使用 call ,在我的示例中使用时如下所示。
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};
}
这基本上引入了所有到达此端点的测试用例的调用延迟 - 不 满足我的目的。
有什么方法可以重构我的 Mirage 设置,以便我可以设置
时序(延迟)配置仅适用于某些情况,而对所有其他情况保持正常。
如果您只想在 单个测试 中引入延迟,您始终可以在测试中覆盖路由处理程序,包括传递计时选项:
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
}
为了在我的前端测试一些超时情况,我想在 mirage 中引入人为延迟,同时仅响应某些特定请求并立即响应所有其他情况。
我正在写这样的幻影场景
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 (..){
}
}
}
在此post、
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};
}
这基本上引入了所有到达此端点的测试用例的调用延迟 - 不 满足我的目的。
有什么方法可以重构我的 Mirage 设置,以便我可以设置 时序(延迟)配置仅适用于某些情况,而对所有其他情况保持正常。
如果您只想在 单个测试 中引入延迟,您始终可以在测试中覆盖路由处理程序,包括传递计时选项:
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
}