[英]ember-cli-mirage in legacy app
We have application that used Pretender to provide fixtures for tests. 我们有使用Pretender提供测试夹具的应用程序。 Now we're trying to migrate to ember-cli-mirage .
现在,我们正在尝试迁移到ember-cli-mirage 。 We cannot migrate all the fixtures at once.
我们不能一次迁移所有的灯具。 So what is basically happening there is that we are starting our own Pretender server and ember-cli-mirage is starting it's own.
因此,基本上正在发生的是,我们正在启动自己的Pretender服务器,而ember-cli-mirage正在启动它自己的服务器。 Whic renders following warning:
Whic提出以下警告:
You created a second Pretender instance while there was already one running.
您已经创建了第二个Pretender实例,而该实例已经在运行。 Running two Pretender servers at once will lead to unexpected results and will be removed entirely in a future major version.Please call .shutdown() on your instances when you no longer need them to respond.
同时运行两个Pretender服务器会导致意外结果,并将在以后的主要版本中完全删除。如果不再需要它们响应,请在实例上调用.shutdown()。
Since it is just a warning, it should not be an issue for the transient period. 由于这只是一个警告,因此在过渡时期不应该成为问题。 Problem is that once Mirage is loaded into our application, old Pretender routes stops responding.
问题是,一旦Mirage加载到我们的应用程序中,旧的Pretender路由就会停止响应。 I guess that's what "... will lead to unexpected results" is referring to.
我想这就是“ ...将导致意外结果”的意思。
Any chance to run ember-cli-mirage alongside manually created Pretender routes? 有机会与人工创建的Pretender路线一起运行ember-cli-mirage吗? Or just to use Mirage server and inject those routes there?
还是仅使用Mirage服务器并将那些路由注入那里?
I would use Mirage's server and then load up your Pretender routes inside of it. 我会使用Mirage的服务器,然后在其中加载您的Pretender路由。 (Mirage's server is really just an object that
new
s up a Pretender instance). (Mirage的服务器实际上只是一个
new
的Pretender实例的对象)。 If folks see mirage
folder they'd probably expect the routes to be defined there. 如果人们看到
mirage
文件夹,他们可能希望在其中定义路线。 Also, Mirage cleans up its Pretender instance during testing. 此外,Mirage在测试期间会清理其Pretender实例。
In mirage/config.js
you could import your existing Pretender routes and call them there. 在
mirage/config.js
您可以导入现有的Pretender路由并在其中调用它们。 Mirage has sugar on top of Pretender but you can always access the underlying pretender instance via this.pretender
within the config
function: 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);
}
So setupYourOldRoutes
could be a function that takes a pretender instance and then defines all your existing route handlers using it. 所以
setupYourOldRoutes
可以是一个函数,它带有一个伪装实例,然后使用该实例定义所有现有的路由处理程序。
Based on @samselikoff answer I found a solution for my case. 基于@samselikoff答案,我找到了针对我的案例的解决方案。 We already have one central point, that is handling creation of pretender instance.
我们已经有一个中心点,即处理假装实例的创建。 So the fix was just to pass Mirage's Pretender instead of creating new one:
因此解决方法是通过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);
}
Tricky part was to make sure that initPretender()
is called before any of our legacy code tries to call getPretender()
. 棘手的部分是确保
initPretender()
被调用我们的任何遗留代码试图调用之前 getPretender()
I think usually that is not a trouble. 我认为通常这不是麻烦。 In our case we patched
tests/helpers/start-app.js
so that some fixtures were injected in every test. 在我们的案例中,我们修补了
tests/helpers/start-app.js
以便在每次测试中注入一些固定装置。 And that caused calling getPretender()
too early. 这导致调用
getPretender()
太早。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.