Ember mirage 仅在特定情况下引入延迟
Posted
技术标签:
【中文标题】Ember mirage 仅在特定情况下引入延迟【英文标题】:Ember mirage introduce delay in specific cases only 【发布时间】:2018-01-18 22:22:38 【问题描述】:为了在我的前端测试一些超时情况,我想在 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 (..)
在这篇文章中,Introduce momentary delays in ember-cli-mirage Sam 建议使用 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 设置,以便我可以设置 定时(延迟)配置仅适用于某些情况,而其他情况则保持正常。
【问题讨论】:
【参考方案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
【讨论】:
感谢山姆的建议。但是我遇到了其他问题-我不知道如何正确安装此 sessionRouteHandler 模块。我不断收到未捕获的错误:找不到从app-name/mirage/config
导入的模块 app-name/mirage/route-handlers/custProfileRouteHandler
我什至尝试在 ember-cli-build.js 中导入,但是当我执行此操作时似乎无法正确找到路径 app.import('route-handlers/custProfileRouteHandler.js');或 app.import(app-name/mirage/route-handlers/custProfileRouteHandler.js');我不断收到错误,例如 Broccoli Plugin: [BroccoliMergeTrees: TreeMerger (otherAssetTrees)] failed with: Error: ENOENT: no such file or directory, scandir /app-path/app-name/tmp/funnel-input_base_path-FKJDF7bj.tmp /路由处理程序/
现在我已经采用了您提到的解决方案,其中不包括创建 sessionRouteHandler。不理想,但可以完成工作。我的模块没有收到我的 Ember - 这是一个单独的问题,可以在单独的帖子中处理。感谢您的帮助山姆以上是关于Ember mirage 仅在特定情况下引入延迟的主要内容,如果未能解决你的问题,请参考以下文章
Ember Mirage 没有将模型作为 ember 对象传递
Ember 数据模型中的计算属性不适用于 ember-cli-mirage 模型