前提・実現したいこと
Railsの開発でMinitestを使用しています。
fixtureで大量のデータを作成した場合に、テストの実行速度を低下させない方法を模索しているのですが、
具体的な方法が分からず、質問させて頂きました。
Railsのバージョンは5.2.1です。
発生している問題
ページネーション用のgemとして、will_paginateを使用しており、
画面毎にページネーションの動作確認するための結合テストを作成しています。
ページネーションを動作させるため、テスト用のデータを画面毎に300件程度作成する必要があり、
fixtureファイルで合計900件程度のデータを作成したところ、テスト全体の実行速度が2〜3倍程度遅延してしまいました。
(例えば、ユーザー一覧画面用のテストデータとして、適当なユーザーを300人程度作成するイメージです)
色々、動作の検証をした結果、fixtureのデータ件数を増やすほど、テストの実行速度が遅くなることが分かりました。
想定される原因
Minitestで記述したテストコードが実行される際に、都度、全てのfixtureファイルが自動で読み込まれます。
大量のfixtureデータを定義した場合に、全テストコードにおいて、fixtureの読み込み時間が増えたことが主な原因だと考えています。
自分で調べたことや試したこと
- Factory_botを使ってテストデータを作成する。
Factory_botを使った場合、動的にテストデータの数を変更できるため、期待していた動作になりました。
現状、一番最適な方法なのでは?と思っています。
2. rails db:fixtures:load RAILS_ENV=test を実行し、テスト用のDBにデータを保存してからテストを実行する。
各テストコードが実行される都度、新たにfixtureを読み込むため、効果がありませんでした。
質問
- fixtureファイルが、自動で読み込まれないように設定する方法はありますか?
2. 特定のテストで大量のデータを使用したい場合は、factorybotを使う方法が無難なのでしょうか?
3. user_controller_testや、post_controller_testなど「任意のテスト」で「特定のfixtureファイルだけ読み込む」といった方法がありますか?
初心者の質問で読みづらい点が多々あるかと思いますが、解決策等ご教授頂けると幸いです。よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/02 03:54