LoginSignup
1
0

More than 1 year has passed since last update.

Redwood.jsでテストの立ち上がりを高速化する

Last updated at Posted at 2022-12-29
追記あり
結論だけ知りたい方は一番最後までスクロールしてください

モチベーション

以前こちらの記事に書いた通り、Redwood.jsでは、テストの実行前に毎回Prisma Clientの生成とDBのリセットを行う処理が入ります。

これにより、私の環境ではテスト開始が毎回7秒程度遅延していました。
テスト駆動開発(TDD)などを行う場合はかなりスピードを遅らせる要因になるため、こちらを解消する方法をご紹介します。

TR;DR

SKIP_DB_PUSH=1 yarn rw test # 実行時にSKIP_DB_PUSH=1を設定します

説明

Redwood.jsのJestの設定はかなり、複雑に入り組んでいるのですが、Prisma Clientの生成とDBのリセットを行う処理についてはこちらに記述されています。

内容は以下のようになっています。

globalSetup.js
...
module.exports = async function () {
  if (process.env.SKIP_DB_PUSH !== '1') {
    const process = require('process')
    // Load dotenvs
    require('dotenv-defaults/config')

    const cacheDirDb = `file:${path.join(__dirname, '.redwood', 'test.db')}`
    process.env.DATABASE_URL = process.env.TEST_DATABASE_URL || cacheDirDb

    const command =
      process.env.TEST_DATABASE_STRATEGY === 'reset'
        ? ['prisma', 'migrate', 'reset', '--force', '--skip-seed']
        : ['prisma', 'db', 'push', '--force-reset', '--accept-data-loss']

    const execa = require('execa')
    execa.sync(`yarn rw`, command, {
      cwd: rwjsPaths.api.base,
      stdio: 'inherit',
      shell: true,
      env: {
        DATABASE_URL: process.env.DATABASE_URL,
      },
    })
  }
}

冒頭で
if (process.env.SKIP_DB_PUSH !== '1') {
となっているのでこのSKIP_DB_PUSHの値が1になっていればこの関数は全てスキップされるようになっています。

実際にこちらのレポジトリで試してみましたが、
https://github.com/macoto1995/redwood-tdd

一度通常のyarn rw testを実行した後SKIP_DB_PUSH=1 yarn rw testを実行すると
Prisma Clientの生成とDBのリセットを行う処理を行わず、最初からJestが実行されました。

追記

db-pushオプションなるものがあるらしくこちらをfalseに設定するだけで同じことができるようです。

yarn rw test db-push false

本家のドキュメントにも記載されていました。
https://redwoodjs.com/docs/cli-commands#test

Redwood.jsの実装
https://github.com/redwoodjs/redwood/blob/main/packages/cli/src/commands/testHandler.js#L134

1
0
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
1
0