web-dev-qa-db-ja.com

サイプレス:3つの異なる応答を伴う同じルートのスタブ応答

アプリケーションに単一のエンドポイントがあります。 paramsで異なるアクションを使用して、リクエストごとに同じAPIをヒットします。

URL:

/application/api

サンプルリクエストペイロード1:

{
  "action": "CARD_TRANSACTION_HISTORY",
  "data": {
    "date_from": "2018-12-01",
    "date_to": "2018-12-31",
    "total": 5
  },
  "meta": {}
}

サンプルリクエストペイロード2:

{
  "action": "CARD_BALANCE",
  "data": {
    "date_from": "2018-12-01",
    "date_to": "2018-12-31",
    "total": 5
  },
  "meta": {}
}

サンプルリクエストペイロード3:

{
  "action": "CURRENCY_RATES",
  "data": {
    "date_from": "2018-12-01",
    "date_to": "2018-12-31",
    "total": 5
  },
  "meta": {}
}

上記のリクエストのアクションは、リクエストごとに異なります。

ダッシュボードページが読み込まれると、3 concurrent AJAX POSTさまざまなアクションのリクエストがトリガーされます。

ヒノキの問題は、ルートに対して1つの応答しか指定できないことです。これを処理する他の方法は、順次要求を行うことです(これは実行できません)。

応答を関数として記述しても、呼び出されるのは1回だけです。

ペイロードに基づいてデータをモックする方法について何かアイデアはありますか?

7

誰かがこの質問に来た場合、私はおそらく私のために働いた別のハックを見つけました(私はフェッチリクエストとヒノキを回避するためにアンフェッチポリフィルを使用しています)-これが1つのルートのコードです。

cy.route({
  url: '/api/ngfw/devices/search',
  method: 'POST',

  // Default response, when parametrs doesn't match
  response: [],

  onResponse: (xhr) => {
    xhr.response = { body: [] };
    const { body } = xhr.request;

    if (body.groupBy) {
      const [groupBy] = body.groupBy;
      if (groupBy === 'overallColor') {
        Object.defineProperty(xhr.xhr, 'responseText', {

          // Putting response inside
          value: JSON.stringify(mockData.totalsResult),

          enumerable: true
        });
      }
    }
  },
});
1
SergeS