2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

PlaywrightでHTTPリクエストをモック

Posted at

webアプリをe2eでテストするときに頭を悩ませるのがAPIサーバとの通信です。
localやCI上でどこにエンドポイントを用意するかとか、
DBの状態はどうしておけばいいなど考えることがたくさんあります。

それを解決する一つの手段として、HTTPのリクエストをモックすることが考えられます。
フロントエンドからはAPIサーバと通信しているように見える状態を作ります。

playwrightでの実装方法

playwrightでお馴染みの「page」オブジェクトを使います。

page.route(`http://localhost:3000/api/v1/hoge`, async (route) => {
  const method = route.request().method()
  if ('GET' === method) {
    const response = { message: 'ダミーデータだお' }
    await route.fulfill({
      status: 200,
      contentType: 'application/json',
      body: JSON.stringify(response),
    })
  }
})

この場合、フロントエンド側で
http://localhost:3000/api/v1/hoge
にGETでアクセスした時に
{ message: 'ダミーデータだお' }
というJSONが返されることになります。

それってe2eテストなの?

厳密にはe2e(End to End)テストとは言えないのかも知れませんが、フロントエンドのコードベースだけで完結するのでお手軽です。

e2eとは別の呼称が欲しいですね。

厳密なe2eと比べてのメリット
  • apiサーバを起動しておかなくて良い
  • DBを用意しなくて良い
  • 通信コストがなくなるのでテストも速くなる
  • 自由にAPIのレスポンスを定義できるので、レアケースの処理もテストしやすい
デメリット
  • ダミーのデータを使うので、都合の良いシチュエーションだけの検証となりがち
  • 実際のAPIレスポンスの形が変わったら、ダミーのデータも変えないといけない(ダブルメンテ)
  • APIへのリクエストが正しいかの検証にはならない
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?