cypress で polling 処理をしたい

cypress でポーリングの E2E のテストをしたい場合

ステータスを確認するためにポーリングする実装をしたのですが、cypress で API をモックする場合

cy.intercept で http リクエストを mock 可能なのですが、

it('hogehoge', () => {
  // todoのエンドポイントをmockする
  cy.intercept('GET', '/todos', [{ name: 'hoge1' }])

// 何かしらの処理

// もう一回同じエンドポイントを叩く cy.intercept('GET', '/todos', [{ name: 'hoge1' }, { name: 'hoge2' }]) })

とすると /todos のレスポンスは常に { name: hoge1 } しか返ってこない...

と思って調べてみると

https://glebbahmutov.com/blog/cypress-intercept-problems/#sending-different-responses

it('hogehoge', () => {
  const items = [{ name: 'hoge1' }, { name: 'hoge2' }]
  cy.intercept('GET', '/todos', (req) => req.reply(replies.shift()))
})

みたいな実装をすることで行けるようになりました。 うまいこと破壊的メソッドを利用する感じですね

以上

ref

https://glebbahmutov.com/blog/cypress-intercept-problems