目次
RefreshDatabaseを使用した移行を使用します
シードデータを選択的に
取引を使用する(注意して)
自分の後に掃除する(必要なとき)
ホームページ PHPフレームワーク Laravel Laravelでテストするためのデータベース状態の管理

Laravelでテストするためのデータベース状態の管理

Jul 13, 2025 am 03:08 AM
laravel データベースのテスト

Laravelテストでデータベース状態を管理する方法には、RefreshDatabaseの使用、データの選択的シード、トランザクションの慎重な使用、および必要に応じて手動クリーニングが含まれます。 1. refressDatabaseの特性を使用して、データベース構造を自動的に移行して、各テストがクリーンなデータベースに基づいていることを確認します。 2。特定の種子を使用して必要なデータを埋め、モデル工場と組み合わせて動的データを生成します。 3.データベーストランザクションの特性を使用してテストの変更をロールバックしますが、その制限に注意してください。 4.自動的にクリーニングできない場合、テーブルを手動で切り捨てるか、データベースを再編成します。これらの方法は、テストと環境の種類に従って柔軟に選択され、テストの信頼性と効率を確保します。

Laravelでテストするためのデータベース状態の管理

Laravelでのテストには、多くの場合、実際のデータベースを操作することが含まれ、テスト間のデータベースの状態を管理することは、信頼できる予測可能な結果にとって残酷です。目標は、以前のテストや残りのデータからの副作用なしに、各テストが単独で実行されることを確認することです。

Laravelでテストするためのデータベース状態の管理

Laravelでテストする際にデータベース状態を管理する実用的な方法をいくつか紹介します。

Laravelでテストするためのデータベース状態の管理

RefreshDatabaseを使用した移行を使用します

Laravelで最も一般的で効果的な戦略の1つは、 RefreshDatabase特性を使用することです。テストが実行される前にデータベーススキーマを自動的に移行し、毎回クリーンなスレートを確保します。

これは、テスト中にSQLite In-MemoryデータベースまたはMySQL/PostgreSQLで特にうまく機能します。テストクラスに特性を追加するだけです。

Laravelでテストするためのデータベース状態の管理
 Illuminate \ Foundation \ Testing \ RefreshDataBaseを使用します。

Class Exampletestはテストケースを拡張します
{
    refreshdatabaseを使用してください。

    //ここでのテスト
}

それは高速で、テーブルを手動で切り捨てたり、毎回すべてを再洗浄することなく、データベース構造を最新の状態に保ちます。


シードデータを選択的に

テストを実行する前に、特定のデータセットが存在する場合がある場合があります。これは、見ることができる場所です。テスト内の特定のシーダーを呼び出して、必要なデータを入力できます。

例えば:

 $ this-> seed(usertableseeder :: class);

絶対に必要でない限り、データベース全体を見ないでください。代わりに、テストに必要なもののみを確認してください。これにより、テストをより速く、より集中させます。

また、モデル工場と視線を組み合わせて、その場で動的なテストデータを生成することもできます。

 user :: factory() - > count(5) - > create();

このようにして、データベースをオーバーロードせずに一貫した現実的なデータを取得します。


取引を使用する(注意して)

別のアプローチは、データベーストランザクションで各テストをラップし、その後巻き戻すことです。 Laravelは、 DatabaseTransactions特性を介してこれをサポートしています。

 Illuminate \ Foundation \ Testing \ databastransactionsを使用します。

Class Exampletestはテストケースを拡張します
{
    DataBasTransactionsを使用します。

    //テストはこちらをご覧ください
}

この方法は、データベースを切り捨てたり更新したりしないため、高速です。テストが終了した後、変更をロールバックするだけです。ただし、注意してください。コードが職人コマンドを使用している場合、またはEloquentの外側のDBと対話する場合(生のクエリなど)、トランザクションが適切にロールバックされない場合があります。

また、これは、トランザクションが異なって動作するため、メモリ内データベースを使用する場合、SQLiteのようなドライバーではうまく機能しません。


自分の後に掃除する(必要なとき)

場合によっては、特に機能またはブラウザのテストでは、移行やトランザクションによってクリーンアップされていないデータが表示される場合があります。これらの状況では、テストの開始または終了時に手動でテーブルを切り捨てることを検討してください。

あなたはこれを行うことができます:

 artisan :: call( 'db:seed'、[' -  class' => 'databaseseeder'、 ' -  force' => true]);

または特定のテーブルを切り捨てます。

 db :: table( 'users') - > truncate();

トランザクションや移行を使用するよりも切り捨てが遅いことに注意してください。したがって、控えめに使用してください。


Laravelテストでデータベース状態の管理は複雑である必要はありません。テストの種類と環境に基づいて適切なツールを選択します。通常、 RefreshDatabaseほとんどのニーズをカバーします。最良の結果を得るために、それを選択的な視聴およびモデル工場と組み合わせてください。トランザクションは物事をスピードアップできますが、警告が付いています。そして、時には、手動のクリーンアップが唯一の方法です。

基本的にそれだけです。

以上がLaravelでテストするためのデータベース状態の管理の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Stock Market GPT

Stock Market GPT

AIを活用した投資調査により賢明な意思決定を実現

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

ホットトピック

LaravelでEloquentの使用方法 LaravelでEloquentの使用方法 Aug 21, 2025 pm 02:30 PM

モデルと移行の作成:phpartisanmake:modelpost-mを使用してモデルと移行ファイルを生成し、テーブル構造を定義し、phpartisannigrateを実行します。 2。基本的なCRUD操作:post :: all()、find()、create()、save()、delete()を使用して、データをクエリ、作成、更新、削除します。 3.雄弁さの使用:モデル内のbelundstoとhasmany関係を定義し、with()メソッドを使用して関連するデータをプリロードして、n 1クエリの問題を回避します。 4。雄弁クエリ:クエリコンストラクターを使用して、どこに通話をチェーンしますか

Laravelのタスクスケジューリングの使用方法 Laravelのタスクスケジューリングの使用方法 Aug 31, 2025 am 06:07 AM

Laravelのタスクスケジューリングシステムを使用すると、サーバーCrontabを手動で編集せずにPHPを介してタイミングタスクを定義および管理できます。1分ごとに1分に1回実行されるCronタスクを追加する必要があります。 クラス; 1.タスクの定義は、$スケジュールなどのコマンド、コール、またはexecメソッドを使用できます。

Laravelでソーシャルネットワークを作成する方法 Laravelでソーシャルネットワークを作成する方法 Sep 01, 2025 am 06:39 AM

はい、youcancreateasocialnetworkwithlaravelbywollowingesteps:1。setuplaravelusingcomposer、configurethe.envfile、enableauthicationviabreeze/jetstream/fortify、andrunmigrations forusermanmanagement.2.implementcore featuresincludingurprofiThuserprofiThaTarasa

Laravelで多型関係を扱う方法 Laravelで多型関係を扱う方法 Aug 25, 2025 am 10:56 AM

polymorphicrelationshipsinlaravelallowallowAmodellikecommentorimageTobelOngtomtoModelssuchaspost、video、oruserusisingasingleassociation.2.thedatabaseschemarequires {lateration} _idand {relation} _tepecolumns、exemmentable_mentable_mentablementable

Laravelでモバイルアプリバックエンドを構築する方法 Laravelでモバイルアプリバックエンドを構築する方法 Sep 02, 2025 am 08:34 AM

Laravelを使用してモバイルバックエンドを構築するには、最初にフレームワークをインストールし、データベース環境を構成する必要があります。 2。ルート/API.phpでAPIルートを定義し、リソースコントローラーを使用してJSON応答を返します。 3. Laravelsanctumを介してAPI認証を実装して、モバイルストレージと認証用のトークンを生成します。 4.ファイルをアップロードするときにファイルタイプを確認し、パブリックディスクに保存し、外部アクセス用のソフトリンクを作成します。 5.生産環境には、HTTPSが必要です。現在の制限を設定し、CORを構成し、APIバージョン制御を実行し、エラー処理を最適化します。また、APIリソース、ページング、キュー、APIドキュメントツールを使用して、保守性とパフォーマンスを向上させることもお勧めします。 Laravelを使用して安全を構築し、

Laravelアプリケーションを国際化する方法 Laravelアプリケーションを国際化する方法 Aug 22, 2025 pm 02:31 PM

言語ファイルの作成:リソース/langディレクトリで各言語(EN、ESなど)のサブディレクトリを作成し、messages.phpファイルを追加するか、jsonファイルを使用して翻訳を保存します。 2.アプリケーション言語の設定:リクエストヘッダーを読み取り、ミドルウェアを介して承認語本を読むか、URLプレフィックスを使用して言語を検出し、app() - > setlocale()を使用して現在の言語を設定し、kernel.phpでミドルウェアを登録します。 3。翻訳関数を使用します:viewで__()、trans()または@langを使用して翻訳コンテンツを取得すると、フォールバックをサポートする__()を使用することをお勧めします。 4。サポートパラメーターと複数:次のような翻訳文字列でプレースホルダーを使用します:n

Laravelのファイルにメッセージを記録する方法は? Laravelのファイルにメッセージを記録する方法は? Sep 21, 2025 am 06:04 AM

laravelusesmonologtologmessagesviathelogfacade、withdefaultlogsstoredinstorage/logs/lavel.log.log.configurechannelsinconfig/logging.phptocontrolotput; thedefaultStackChannElagGregatesMultipleHandlikesingle、writeStoeSoafile.iseL.

Laravelで「私を覚えている」機能を実装する方法 Laravelで「私を覚えている」機能を実装する方法 Aug 31, 2025 am 08:53 AM

ユーザーテーブルにremember_token列があることを確認してください。 Laravelのデフォルトの移行には、すでにこのフィールドが含まれています。そうでない場合は、移行を通じて追加されます。 2。ログインフォームで名前を記憶した名前のチェックボックスを追加して、「覚えておいてください」オプションを提供します。 3.覚えているパラメーターをAuth :: tirmed()メソッドに渡して、手動認証中に永続的なログインを有効にします。 4。「Memember Me」はデフォルトで5年間続き、config/auth.phpのremems_for configurationアイテムを介してカスタマイズできます。 5。LARAVELは、パスワードが変更されたときにremember_tokenを自動的に無効にします。 HTTPSを使用して、生産環境のセキュリティを確保することをお勧めします。 6

See all articles