簡體   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