繁体   English   中英

遗留应用程序中的余烬

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM