0

我们有使用Pretender为测试提供固定装置的应用程序。现在我们正在尝试迁移到ember-cli-mirage。我们不能一次迁移所有的灯具。所以基本上发生的事情是我们正在启动我们自己的 Pretender 服务器,而 ember-cli-mirage 正在启动它自己的服务器。哪个呈现以下警告:

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

由于这只是一个警告,因此在过渡期间应该不是问题。问题是一旦 Mirage 被加载到我们的应用程序中,旧的 Pretender 路由就会停止响应。我想这就是“......将导致意想不到的结果”所指的。

有机会在手动创建的 Pretender 路线旁边运行 ember-cli-mirage 吗?或者只是使用 Mirage 服务器并在那里注入这些路由?

4

2 回答 2

1

我会使用 Mirage 的服务器,然后在其中加载你的 Pretender 路由。(Mirage 的服务器实际上只是一个new建立 Pretender 实例的对象)。如果人们看到mirage文件夹,他们可能希望在那里定义路由。此外,Mirage 会在测试期间清理其 Pretender 实例。

mirage/config.js你可以导入现有的 Pretender 路由并在那里调用它们。Mirage 在 Pretender 之上有糖,但您始终可以通过函数this.pretender内部访问底层的伪装者实例config

// mirage/config.js
import setupYourOldRoutes from 'somewhere';

export default function() {
  this.get('users'); // new Mirage shorthand

  setupYourOldRoutes(this.pretender);
}

所以setupYourOldRoutes可能是一个函数,它接受一个伪装实例,然后使用它定义所有现有的路由处理程序。

于 2017-02-21T14:40:59.940 回答
1

根据@samselikoff 的回答,我找到了适合我的案例的解决方案。我们已经有了一个中心点,那就是处理伪装实例的创建。所以修复只是通过 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()过早打电话。

于 2017-02-21T20:46:53.113 回答