遗留应用中的ember-cli-mirage

时间:2017-02-21 13:27:12

标签: ember.js ember-cli-mirage pretender.js

我们有使用Pretender来为测试提供装置的应用程序。现在我们正尝试迁移到ember-cli-mirage。我们无法一次迁移所有灯具。所以基本上发生的事情是我们正在开始我们自己的Pretender服务器,并且ember-cli-mirage正在启动它自己的。警告后会发出警告:

  

您已经创建了第二个Pretender实例,但已经有一个正在运行。一次运行两个Pretender服务器将导致意外结果,并将在未来的主要版本中完全删除。当您不再需要它们响应时,请在您的实例上调用.shutdown()。

因为它只是一个警告,所以它不应该成为短暂时期的问题。问题是,一旦Mirage加载到我们的应用程序中,旧的Pretender路由就会停止响应。我想那是什么" ...会导致意想不到的结果"指的是。

有没有机会在手动创建Pretender路线的同时运行ember-cli-mirage?或者只是使用幻影服务器并在那里注入那些路线?

2 个答案:

答案 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()