統合テストを書きましょう
https://zenn.dev/cybozu_frontend/articles/6c2a54196f056d
早速、取り組んでいただき、ありがとうございます。
念のため、Discordの内容を転記いたします。
============================================================================ 手元でタイムアウトとなるのを確認し、以下の対応で統合テスト(暫定版)が通ることを確認しました。
- playwrightと依存関係のインストール ・pnpm exec playwright install ・pnpm exec playwright install-deps
- 初期段階のテストが現在のトップページ(ログアウト済み)のテストとなるように変更
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();
});
============================================================================
@KATO-Hiro playwright.config.ts のserver設定の内容は、リポジトリに登録されているものそのままでしょうか? よろしくお願いします。
@prettyhappycatty
@KATO-Hiro playwright.config.ts のserver設定の内容は、リポジトリに登録されているものそのままでしょうか? よろしくお願いします。
返信が遅くなり、すみません。 はい。そのままです。
@KATO-Hiro ありがとうございます。タイムアウトを長くしたら(1000*1000ms)いけました。
キャプチャ&リプレイのメモ
実行準備
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/
@KATO-Hiro preview環境用のDBに、テストデータを投入したいときはどのようにすれば良いでしょうか?
@prettyhappycatty
@KATO-Hiro preview環境用のDBに、テストデータを投入したいときはどのようにすれば良いでしょうか?
ローカル環境のpreviewであれば、dev環境のDBがそのまま利用できると思います。
本番環境でのpreviewの場合は、現状私が手動で追加しています。 (誤操作が怖いので、早めに自動化したいところです。)
@KATO-Hiro ありがとうございます。 devと同じである件承知しました。seed.tsのユーザが既存のユーザとして使えるということですね!
@prettyhappycatty
@KATO-Hiro ありがとうございます。 devと同じである件承知しました。seed.tsのユーザが既存のユーザとして使えるということですね!
おっしゃる通りだと思います。 (previewだとViteというツールを使っているため,devよりも高速に動作するようです。)
@KATO-Hiro 私の環境だけなのかもしれませんが、 ブラウザからdev環境とpreview環境のログイン(ユーザAlice)を試してみたのですが、dev環境ではログインできるのに、preview環境ではログインできませんでした。 自分で作ったユーザでのログインはどちらの環境もできたのと、ユーザAliceを登録しようとするとどちらもエラーになったので、ユーザはいるけどパスワードが違うのかな?という状況で詰まっています。 もしこのあたりを調査するとよい、アイデアがあれば教えてください。
@prettyhappycatty
サンプルデータの追加後にpnpm buildとpnpm previewを実行されましたでしょうか? (既に実行されていましたら、別の方法を考える必要がありそうです)
私が認識している範囲では、preview環境は最後にbuildした時点の内容が反映されていると思います。
例えば、アカウント画面でユーザを作成→build→preview→サンプルデータの追加 のような手順だと、コメントいただいたようにサンプルデータはpreview環境に反映されていないのではないかと予想しています。
@KATO-Hiro はい。サンプルデータの追加後にbuildとpreviewしています。 そして、ユーザがいるのにログインパスワードではねられる、がなんとも不思議な現象です。 いままで、自分でUIで作ったものでログインは試したのですが、DBに入ったテストデータでログインが初めてなもので、データを入れるところと、ユーザを作るところの処理を追ってみようと思います。
@KATO-Hiro すみません、ユーザーいないかもしれません。 コマンドで観に行くと、db_userが一人しかいなくて、pnpm db:seedでfindした結果を出力するといるみたいです。
@prettyhappycatty 教えていただき、ありがとうございます。 私もローカル環境で確認してみます。
@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がついていない。
上の件は、ログインできない件とは関係なく、テスト前のsetupで作るユーザで、うまくkeyテーブルにパスワードを登録できてなかったのが原因でした。 お騒がせしました🙇♀️
調べていただき、ありがとうございます。 無事、解決されたということで、ホッとしています。
userテーブルに関しては、先にテーブルをcreateして、後からmigrationファイルを作成したと記憶しています(これが影響しているのかどうかはよく分かっていない状態です)。
上の件は、ログインできない件とは関係なく、テスト前のsetupで作るユーザで、うまくkeyテーブルにパスワードを登録できてなかったのが原因でした。
もしかすると、fabbricaの実行が不安定なことも影響しているかもしれません。
https://github.com/innei-template/nest-http-prisma-zod
VitestでPrismaのCRUDをテストできそう(今後のメンテナンスの可能性が低いと思われるので、別の方法を調べる必要がありそうです。)
https://github.com/aiji42/vitest-environment-vprisma