2017-02-21 62 views
0

我們有應用程序使用Pretender爲測試提供燈具。現在我們正在嘗試遷移到ember-cli-mirage。我們不能一次移動所有的燈具。所以基本上發生的是我們正在創建自己的Pretender服務器,並且ember-cli-mirage正在啓動它自己的服務器。 Whic呈現以下警告:傳統應用程序中的餘燼 - 海市蜃樓

您創建了第二個Pretender實例,但已經有一個運行。一次運行兩個Pretender服務器將導致意外的結果,並將在未來的主要版本中完全刪除。請在您的實例中調用.shutdown(),而不再需要它們作出響應。

既然這只是一個警告,它不應該是一個過渡期的問題。問題是,一旦幻影載入我們的應用程序,舊的僞裝者路線停止響應。我想這就是「......會導致意想不到的結果」所指的。

任何運行ember-cli-mirage與手動創建的僞裝者路線一起的機會?或者只是使用Mirage服務器並在那裏注入這些路線?

回答

1

我會使用Mirage的服務器,然後在它裏面加載你的Pretender路由。 (Mirage的服務器實際上只是一個對象,new是一個Pretender實例)。如果人們看到mirage文件夾,他們可能會期望在那裏定義路線。此外,Mirage在測試期間清理了Pretender實例。

mirage/config.js你可以導入你現有的Pretender路由並在那裏打電話給他們。幻影對僞裝的頂部糖,但你總是可以通過this.pretender訪問config函數內的基本僞裝實例:

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

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

    setupYourOldRoutes(this.pretender); 
} 

所以setupYourOldRoutes可能是一個函數,它接受一個僞裝實例,然後使用定義了所有現有的路由處理程序它。

+0

謝謝!推動我糾正方向。 –

0

基於@samselikoff答案我找到了我的案例的解決方案。我們已經有一箇中心點,那就是處理僞裝者實例的創建。因此,修復只是通過幻影的僞裝,而不是創建新的:

// 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()

+0

非常具體的解決方案,堅持具體問題。如果有人遇到類似問題,請在這裏發帖。 –