質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHPUnit

PHPUnitは、PHP向けのユニット・テスト向けフレームワークで、手動では手間のかかるテスト作業を自動化し、繰り返し実行することが可能です。

Q&A

解決済

2回答

2748閲覧

use DatabaseMigrations を使用したコードで異常終了した際の、処理の内容

june2020

総合スコア0

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHPUnit

PHPUnitは、PHP向けのユニット・テスト向けフレームワークで、手動では手間のかかるテスト作業を自動化し、繰り返し実行することが可能です。

0グッド

0クリップ

投稿2020/06/15 10:06

編集2020/06/16 01:16

前提・実現したいこと

Laravel 5.7

phpunitでテストを試していたところ、
DBがmigrationされ、テーブルがほぼすべて削除されました。

原因

テストコード内で、誤って以下を使用したままphpunitを実行し、異常終了した。

php

1use DatabaseMigrations;

また、migrationファイルは初期のままであった。

質問したいこと

ReaDoublenoには以下のように記載があります。

マイグレーションの使用
一つのアプローチは、それぞれのテストの後にデータベースをロールバックし、次のテストの前にマイグレーションする方法です。Laravelはこれを自動的に処理するために、シンプルなDatabaseMigrationsトレイトを用意しています。テストクラスでこのトレイトを使用するだけで、すべて処理されます。

ここでいうロールバックとは、
①migrationする前のDBの状態ということでしょうか?
それとも
②migrationファイルを以前に実施した時のDBの状態ということでしょうか?

また、異常終了した場合、元のDBの状態に戻す方法はあるでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

Laravelの話をする時は必ずバージョンを書く。
最近のバージョンではDatabaseMigrationsは使ってない。
7.x時点ではRefreshDatabase。3年前からこれ。
https://github.com/laravel/laravel/blob/311c3f823a6f09df5e9b882906456e9caa02132c/tests/Feature/ExampleTest.php

LaravelでのDBを使ったテストは
「インメモリSQLiteを使って毎回リセットしながらテスト」がデフォルト。
これなら異常終了しようがメモリ内だけのことなので何の影響もない。
DBの状態なんか気にしてる時点で間違い。毎回なにもない所から開始。

インメモリSQLite部分も数日前に変更されてたけども。
https://github.com/laravel/laravel/commit/311c3f823a6f09df5e9b882906456e9caa02132c

投稿2020/06/15 11:17

kawax

総合スコア10377

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

june2020

2020/06/16 01:13 編集

ありがとうございます。 Laravelのバージョンは5.7.7でした。 過去は振り返らず、同じ事象を起こすなという助言と受け取ります。
yuki84web

2020/06/16 00:48

Laravel 5.6のセキュリティサポートは終了しているようなので出来れば最新版かLTSの6系を使った方がよさそうです。
june2020

2020/06/16 01:23

ありがとうございます。正しくはLaravel5.7でしたが、同じくサポートが終了しているそうなので、仰る通りです。
guest

0

自己解決

ここでいうロールバックとは、
①migrationする前のDBの状態ということでしょうか?
それとも
②migrationファイルを以前に実施した時のDBの状態ということでしょうか?


以前にマイグレーションを実行した時のDBの状態に戻る。

また、異常終了した場合、元のDBの状態に戻す方法はあるでしょうか。

上記の通り、以前のマイグレーション実行時に戻したいなら

php artisan migrate:rollback

特にマイグレーションでDBを管理していなければ、
初期状態のマイグレーションが実行されたはずなので、
rollbackを行っても元のDBの状態に戻すことはできない。

投稿2020/06/19 02:18

june2020

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問