我们有使用Pretender来为测试提供装置的应用程序。现在我们正尝试迁移到ember-cli-mirage。我们无法一次迁移所有灯具。所以基本上发生的事情是我们正在开始我们自己的Pretender服务器,并且ember-cli-mirage正在启动它自己的。警告后会发出警告:
您已经创建了第二个Pretender实例,但已经有一个正在运行。一次运行两个Pretender服务器将导致意外结果,并将在未来的主要版本中完全删除。当您不再需要它们响应时,请在您的实例上调用.shutdown()。
因为它只是一个警告,所以它不应该成为短暂时期的问题。问题是,一旦Mirage加载到我们的应用程序中,旧的Pretender路由就会停止响应。我想那是什么" ...会导致意想不到的结果"指的是。
有没有机会在手动创建Pretender路线的同时运行ember-cli-mirage?或者只是使用幻影服务器并在那里注入那些路线?
答案 0 :(得分:1)
我会使用Mirage的服务器,然后在其中加载Pretender路由。 (Mirage的服务器实际上只是mirage
一个Pretender实例的对象。如果大家看到mirage/config.js
文件夹,他们可能希望在那里定义路由。此外,Mirage会在测试期间清理其Pretender实例。
在this.pretender
中,您可以导入现有的Pretender路线并在那里调用它们。 Mirage在Pretender之上加糖,但您始终可以通过config
函数中的// mirage/config.js
import setupYourOldRoutes from 'somewhere';
export default function() {
this.get('users'); // new Mirage shorthand
setupYourOldRoutes(this.pretender);
}
访问底层伪装者实例:
setupYourOldRoutes
所以{{1}}可以是一个带有伪装者实例的函数,然后定义所有使用它的现有路径处理程序。
答案 1 :(得分:0)
根据@samselikoff的回答,我找到了一个解决方案。我们已经有了一个中心点,即处理pretender实例的创建。因此修复只是为了通过Mirage的Pretender而不是创建新的:
// 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()
。