AtCoderNoviSteps icon indicating copy to clipboard operation
AtCoderNoviSteps copied to clipboard

統合テストを書きましょう

Open KATO-Hiro opened this issue 2 years ago • 19 comments

https://zenn.dev/cybozu_frontend/articles/6c2a54196f056d

KATO-Hiro avatar Oct 11 '23 12:10 KATO-Hiro

早速、取り組んでいただき、ありがとうございます。

念のため、Discordの内容を転記いたします。

============================================================================ 手元でタイムアウトとなるのを確認し、以下の対応で統合テスト(暫定版)が通ることを確認しました。

  1. playwrightと依存関係のインストール ・pnpm exec playwright install ・pnpm exec playwright install-deps
  2. 初期段階のテストが現在のトップページ(ログアウト済み)のテストとなるように変更
import { expect, test } from '@playwright/test';

test('index page has expected h1', async ({ page }) => {
  await page.goto('/');
  // nameの中身を一時的なものに変更
  await expect(
    page.getByRole('heading', { name: 'TODO: サービスのキャッチフレーズを書く' }),
  ).toBeVisible();
});
Screenshot 2023-11-29 at 21 45 58

============================================================================

KATO-Hiro avatar Nov 29 '23 13:11 KATO-Hiro

@KATO-Hiro playwright.config.ts のserver設定の内容は、リポジトリに登録されているものそのままでしょうか? よろしくお願いします。

prettyhappycatty avatar Dec 05 '23 02:12 prettyhappycatty

@prettyhappycatty

@KATO-Hiro playwright.config.ts のserver設定の内容は、リポジトリに登録されているものそのままでしょうか? よろしくお願いします。

返信が遅くなり、すみません。 はい。そのままです。

KATO-Hiro avatar Dec 05 '23 09:12 KATO-Hiro

@KATO-Hiro ありがとうございます。タイムアウトを長くしたら(1000*1000ms)いけました。

prettyhappycatty avatar Dec 05 '23 10:12 prettyhappycatty

キャプチャ&リプレイのメモ

実行準備 mkdir trial-playwright

cd trial-playwright

npm install

npm init playwright

コンテナでpreviewを立ち上げる(usr/src/app) pnpm build && pnpm preview

キャプチャ&リプレイを開始(trial-playwright %) npx playwright codegen http://127.0.0.1:4173/

prettyhappycatty avatar Dec 06 '23 04:12 prettyhappycatty

@KATO-Hiro preview環境用のDBに、テストデータを投入したいときはどのようにすれば良いでしょうか?

prettyhappycatty avatar Dec 06 '23 09:12 prettyhappycatty

@prettyhappycatty

@KATO-Hiro preview環境用のDBに、テストデータを投入したいときはどのようにすれば良いでしょうか?

ローカル環境のpreviewであれば、dev環境のDBがそのまま利用できると思います。

本番環境でのpreviewの場合は、現状私が手動で追加しています。 (誤操作が怖いので、早めに自動化したいところです。)

KATO-Hiro avatar Dec 06 '23 09:12 KATO-Hiro

@KATO-Hiro ありがとうございます。 devと同じである件承知しました。seed.tsのユーザが既存のユーザとして使えるということですね!

prettyhappycatty avatar Dec 06 '23 10:12 prettyhappycatty

@prettyhappycatty

@KATO-Hiro ありがとうございます。 devと同じである件承知しました。seed.tsのユーザが既存のユーザとして使えるということですね!

おっしゃる通りだと思います。 (previewだとViteというツールを使っているため,devよりも高速に動作するようです。)

KATO-Hiro avatar Dec 06 '23 11:12 KATO-Hiro

@KATO-Hiro 私の環境だけなのかもしれませんが、 ブラウザからdev環境とpreview環境のログイン(ユーザAlice)を試してみたのですが、dev環境ではログインできるのに、preview環境ではログインできませんでした。 自分で作ったユーザでのログインはどちらの環境もできたのと、ユーザAliceを登録しようとするとどちらもエラーになったので、ユーザはいるけどパスワードが違うのかな?という状況で詰まっています。 もしこのあたりを調査するとよい、アイデアがあれば教えてください。

prettyhappycatty avatar Dec 06 '23 13:12 prettyhappycatty

@prettyhappycatty

サンプルデータの追加後にpnpm buildとpnpm previewを実行されましたでしょうか? (既に実行されていましたら、別の方法を考える必要がありそうです)

私が認識している範囲では、preview環境は最後にbuildした時点の内容が反映されていると思います。

例えば、アカウント画面でユーザを作成→build→preview→サンプルデータの追加 のような手順だと、コメントいただいたようにサンプルデータはpreview環境に反映されていないのではないかと予想しています。

KATO-Hiro avatar Dec 07 '23 00:12 KATO-Hiro

@KATO-Hiro はい。サンプルデータの追加後にbuildとpreviewしています。 そして、ユーザがいるのにログインパスワードではねられる、がなんとも不思議な現象です。 いままで、自分でUIで作ったものでログインは試したのですが、DBに入ったテストデータでログインが初めてなもので、データを入れるところと、ユーザを作るところの処理を追ってみようと思います。

prettyhappycatty avatar Dec 07 '23 04:12 prettyhappycatty

@KATO-Hiro すみません、ユーザーいないかもしれません。 コマンドで観に行くと、db_userが一人しかいなくて、pnpm db:seedでfindした結果を出力するといるみたいです。

prettyhappycatty avatar Dec 07 '23 09:12 prettyhappycatty

@prettyhappycatty 教えていただき、ありがとうございます。 私もローカル環境で確認してみます。

KATO-Hiro avatar Dec 07 '23 09:12 KATO-Hiro

@KATO-Hiro もしかして、、、とおもってuserテーブルにpublicをつけたら見つかりました。 docker exec -it ans-db-1 /bin/sh # psql -h localhost -U db_user -d test_db test_db=# select * from user;・・・db_userのみ test_db=# select * from public.user;・・・登録したユーザが見つかる

ちなみに、taskはpublic.taskが空で、taskに入っているみたいです。 (userの入り方を見ると、taskもpublicに入れるべきですよね) どうやってソースコードの中で使い分けているのか、現時点で私はわかっていないです、、、 →migrationコマンドっぽいですかね。私が作ったmigrationファイルがpublicがついていない。

prettyhappycatty avatar Dec 07 '23 10:12 prettyhappycatty

上の件は、ログインできない件とは関係なく、テスト前のsetupで作るユーザで、うまくkeyテーブルにパスワードを登録できてなかったのが原因でした。 お騒がせしました🙇‍♀️

prettyhappycatty avatar Dec 07 '23 12:12 prettyhappycatty

調べていただき、ありがとうございます。 無事、解決されたということで、ホッとしています。

userテーブルに関しては、先にテーブルをcreateして、後からmigrationファイルを作成したと記憶しています(これが影響しているのかどうかはよく分かっていない状態です)。

上の件は、ログインできない件とは関係なく、テスト前のsetupで作るユーザで、うまくkeyテーブルにパスワードを登録できてなかったのが原因でした。

もしかすると、fabbricaの実行が不安定なことも影響しているかもしれません。

KATO-Hiro avatar Dec 07 '23 13:12 KATO-Hiro

https://github.com/innei-template/nest-http-prisma-zod

KATO-Hiro avatar Jun 17 '24 06:06 KATO-Hiro

VitestでPrismaのCRUDをテストできそう(今後のメンテナンスの可能性が低いと思われるので、別の方法を調べる必要がありそうです。)

https://github.com/aiji42/vitest-environment-vprisma

KATO-Hiro avatar Jul 02 '24 00:07 KATO-Hiro