いくつかの失敗に悩まされ、ミラージュを正しく理解しているかどうかを知りたい:
1.ember-cli-mirage で、定義したサーバー応答が実際のサーバーが返すものを反映する必要があるというのは正しいですか? 例えば:
this.get('/athletes', function(db, request) {
let athletes = db.athletes || [];
return {
athletes: athletes,
meta: { count: athletes.length }
}
});
私はカスタムシリアライザーを使用しており、上記はこのルートでの get 要求に対するサーバー応答の形式と一致していますが、2 つのテストで次のエラーで 2 つの失敗が発生しています。normalizeResponse must return a valid JSON API document: meta must be an object
2. Mirage は json:api 形式を強制していますか? テストのセットアップ方法が原因でそうなっているのでしょうか?
たとえば、上記の/athletes
ルートにアクセスするいくつかのテストがありますが、以下のような非同期呼び出しを使用すると失敗が発生します。サーバーの応答動作を正しく上書きする適切な方法と、2 つのテストでコンソールに normalizeResponse エラーが表示されるのに、以下の 1 つだけが失敗する理由を知りたいです。
test('contact params not sent with request after clicking .showglobal', function(assert) {
assert.expect(2);
let done = assert.async();
server.createList('athlete', 10);
//perform a search, which shows all 10 athletes
visit('/athletes');
fillIn('.search-inner input', "c");
andThen(() => {
server.get('/athletes', (db, request) => {
assert.notOk(params.hasOwnProperty("contacts"));
done();
});
//get global athletes, which I thought would now be intercepted by the server.get call defined within the andThen block
click('button.showglobal');
});
});
結果:
✘ Error: Assertion Failed: normalizeResponse must return a valid JSON API document:
* meta must be an object
expected true
ここの最後の例で提案されているように、サーバーの応答を json:api 形式に変更しようとしましたが、これは実際のサーバーの応答とはまったく異なり、アプリがこの構造のペイロードを解析しないため、テストが失敗します。ヒントやアドバイスをいただければ幸いです。