[英]ember-cli-mirage in legacy app
我们有使用Pretender提供测试夹具的应用程序。 现在,我们正在尝试迁移到ember-cli-mirage 。 我们不能一次迁移所有的灯具。 因此,基本上正在发生的是,我们正在启动自己的Pretender服务器,而ember-cli-mirage正在启动它自己的服务器。 Whic提出以下警告:
您已经创建了第二个Pretender实例,而该实例已经在运行。 同时运行两个Pretender服务器会导致意外结果,并将在以后的主要版本中完全删除。如果不再需要它们响应,请在实例上调用.shutdown()。
由于这只是一个警告,因此在过渡时期不应该成为问题。 问题是,一旦Mirage加载到我们的应用程序中,旧的Pretender路由就会停止响应。 我想这就是“ ...将导致意外结果”的意思。
有机会与人工创建的Pretender路线一起运行ember-cli-mirage吗? 还是仅使用Mirage服务器并将那些路由注入那里?
我会使用Mirage的服务器,然后在其中加载您的Pretender路由。 (Mirage的服务器实际上只是一个new
的Pretender实例的对象)。 如果人们看到mirage
文件夹,他们可能希望在其中定义路线。 此外,Mirage在测试期间会清理其Pretender实例。
在mirage/config.js
您可以导入现有的Pretender路由并在其中调用它们。 Mirage在Pretender之上有糖,但是您始终可以在config
函数中通过this.pretender
访问基础的pretender实例:
// mirage/config.js
import setupYourOldRoutes from 'somewhere';
export default function() {
this.get('users'); // new Mirage shorthand
setupYourOldRoutes(this.pretender);
}
所以setupYourOldRoutes
可以是一个函数,它带有一个伪装实例,然后使用该实例定义所有现有的路由处理程序。
基于@samselikoff答案,我找到了针对我的案例的解决方案。 我们已经有一个中心点,即处理假装实例的创建。 因此解决方法是通过Mirage的假装者,而不是创建新的假装者:
// somewhere.js
export default function () {
// initPretender: function () {
// this.pretender = new Pretender();
// }
initPretender: function (pretender) {
this.pretender = pretender;
},
getPretender: function () {
return this.pretender;
}
}
// mirage/config.js
import pretenderWrapper from 'somewhere';
export default function() {
this.get('users'); // new Mirage shorthand
pretenderWrapper.initPretender(this.pretender);
}
棘手的部分是确保initPretender()
被调用我们的任何遗留代码试图调用之前 getPretender()
我认为通常这不是麻烦。 在我们的案例中,我们修补了tests/helpers/start-app.js
以便在每次测试中注入一些固定装置。 这导致调用getPretender()
太早。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.