2017-02-21 6 views
0

Pretenderを使用してテスト用のフィクスチャを提供するアプリケーションがあります。現在、ember-cli-mirageに移行しようとしています。一度にすべてのフィクスチャを移行することはできません。それで基本的に起こっているのは、私たちがPretenderサーバーを開始し、ember-cli-mirageがそれ自身のサーバーを開始しているということです。次の警告を表示します。レガシーアプリケーションのember-cli-mirage

実行済みの2番目のPretenderインスタンスを作成しました。一度に2つのPretenderサーバーを実行すると、予期しない結果が生じる可能性があり、今後のメジャーバージョンでは完全に削除されます。返信する必要がなくなった場合は、インスタンスで.shutdown()を呼び出してください。

これは単なる警告なので、過渡期間の問題ではありません。 Mirageがアプリケーションにロードされると、古いPretenderルートが応答を停止するという問題があります。私はそれが "予期しない結果につながる"と言います。

手動で作成されたPretenderルートと一緒にember-cli-mirageを実行する機会はありますか?または、Mirageサーバーを使用して、そこにこれらのルートを挿入するだけですか?

答えて

1

私はMirageのサーバーを使用して、その内部にPretenderルートをロードします。 (ミラージュのサーバーは実際にはnewのPretenderインスタンスを構成するオブジェクトです)。人々がmirageフォルダを参照している場合は、ルートがそこに定義されていると予想されます。また、Mirageはテスト中にPretenderインスタンスをクリーンアップします。

mirage/config.jsでは、既存のPretenderルートをインポートしてそこに呼び出すことができます。ミラージュは、プリテンダーの上に砂糖を持っていますが、あなたは常にconfig関数内this.pretenderを経由して根本的な偽者のインスタンスにアクセスすることができます

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

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

    setupYourOldRoutes(this.pretender); 
} 

のでsetupYourOldRoutesは偽者のインスタンスを受け取り、その後、使用して、すべての既存のルートハンドラを定義する機能かもしれませんそれ。

+0

ありがとうございます!正しい方向に私を押し込んだ。 –

0

@samselikoffの回答に基づいて、私の場合の解決策が見つかりました。私たちはすでに、1つの中心的な点を持っています。つまり、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); 
} 

トリッキーな部分はgetPretender()を呼び出そうとし私たちのレガシーコードのいずれかのinitPretender()が呼び出されたことを確認しました。私はと思っています。通常は問題ありません。私たちのケースでは、tests/helpers/start-app.jsにパッチを当て、すべてのテストでいくつかのフィクスチャを注入しました。そしてそれはgetPretender()を早く呼び出すことを引き起こしました。

+0

特定の問題に固執する非常に特殊な解決策。誰かが同様の問題を抱えている場合に備えて、ここに投稿してください。 –

関連する問題