LaravelのコントローラーでDBトランザクションを使用できません(DB :: beginTransaction)

user4489520

私は方法を持っているDoctorsControllerを持っていstoreます。私はこのメソッドをテストしていますが、モデルINSERTがテスト環境のデータに対応しないようにしたいです私が使用しているのでDB::beginTransactionDB::rollback()DB::commit()私のコントローラのメソッドと私のテスト方法がないようにしINSERTたクエリを。私の問題は=>テストの実行中にデータベースにレコードがあります。INSERTSテスト中は何も欲しくない

私のテストコード:

public function testStoreMethod()
{
    /*
     * Test when validation fails
     */
    $data = include_once('DoctorsControllerFormData.php');

    foreach($data as $item){
        DB::beginTransaction();
        $response = $this->call('POST', 'doctors', $item);
        $this->assertResponseStatus(400, "response's HTTP code is not 400 : " . implode('\n',array_flatten($item)));
        Log::debug($response);
        DB::rollback();
    }
}

My DoctorsControllerコードスニペット:(UsersController's storeメソッドを呼び出す

public function store()
{
    //some code
    DB::beginTransaction();
    try{
        /*
         * User Creation
         */
        $user = new UsersController();
        $user->setResource('doctor');
        $userID = $user->store();

        //some other code
    }catch (InputValidationFailedException $e){
        DB::rollback();
        return Response::make(json_encode(array('error' => $e->getErrors())), \Symfony\Component\HttpFoundation\Response::HTTP_BAD_REQUEST);
    }catch(Exception $e){
        Log::error('Server Error at DoctorsController');
        DB::rollback();
        App::abort(500, $e->getMessage());
    }
}

My UsersControllerコードスニペット:

public function store()
{
    $user = new User;

    try{
        $inputs = Input::all();
        Log::info("input Data" . implode("\n", array_flatten(Input::all())));
        /*
         * User Creation
         */
        $v = Validator::make(
            $inputs,
            User::$rules
        );

        if($v->fails()) {
            Log::error('Validation Failed! ' . implode("\n", array_flatten($v->messages()->all())));
            throw new InputValidationFailedException($v);
        }
        $user->fname = Input::get('fname');//set first name
        $user->lname = Input::get('lname');//set last name
        $user->email = Input::get('email');//set email
        $user->cell = Input::get('cell');//set cell number
        $user->password = Hash::make(Input::get('password'));//set password
        $user->gender_id = Input::get('gender') == 'm' ? 1 : 0;//set gender
        $user->is_active = 0;//set activation status
        $user->role_id = ($this->resource == 'doctor') ? 1 : 2;
        $user->activation_time = 0;//set activation time default to 0
        $user->expiration_time = 0;//set expiration time default to 0
        //insert the user into DB
        $user->save();
    }catch (InputValidationFailedException $e){
        Log::info('User Validation Failed! ' . implode("\n", array_flatten($e->getErrors())));
        throw $e;
    }catch (Exception $e){
        Log::error('Server Error at UsersController!');
        throw $e;
    }

    return $user->id;
}

ご協力いただきありがとうございます。

ボグダン

コントローラでDB:rollback変更をコミットしている場合、トランザクションがそこで終了したため、テストではそれらの変更を元に戻すことはできません。そうは言っても、開発用と同じデータベースをテストに使用するべきではありません。LaravelにはMigrations&Seedingがあり、テストを実行するたびに専用のテストデータベース更新して再シードするために使用できます。

可能であれば、以下にリンクされているビデオで説明されているように、永続データベースへの書き込みを完全に回避するためにインメモリデータベースを使用することをお勧めします。

Laracasts-メモリ内のDBをテストする

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

PDOのbeginTransaction

分類Dev

Laravel 5.3 queue:work artisanコマンドのnullエラーでbeginTransaction()を取得する

分類Dev

PDO-拡張クラスのbeginTransaction()

分類Dev

EFコアのIsolationLevelを使用したBeginTransaction

分類Dev

休止状態のbegintransactionスロー例外

分類Dev

node.jsmysqlプールbeginTransaction&connection

分類Dev

DB :: beginTransaction()とDB :: transaction()の違いは何ですか?

分類Dev

FragmentTabhostでは、beginTransaction()。replaceによって呼び出されたフラグメントを破棄できません。

分類Dev

LINQ BeginTransactionは新しいコンテキストで機能しますか?

分類Dev

SqlConnection.BeginTransaction c#をモックできますか?

分類Dev

Laravel 5.6ユニットテストnullでのメンバー関数beginTransaction()の呼び出し

分類Dev

自動コミットを使用したC#でのBeginTransactionの操作

分類Dev

TSQLエラー:COMMITTRANSACTIONリクエストに対応するBEGINTRANSACTIONがありません

分類Dev

python sqlite "BEGINTRANSACTION"および "COMMIT"コマンド

分類Dev

Dapper.IDbConnectionでBeginTransactionを使用する適切な方法

分類Dev

PDO :: beginTransaction()は、PDO :: commit()までテーブルまたは行のロックを引き起こしますか?

分類Dev

psql、dbコンテンツを別のコンテンツにコピーできません-トランザクションブロック内で実行できません-

分類Dev

javahibernate-beginTransactionとcreateQueryが見つかりません

分類Dev

エンティティフレームワークBeginTransactionを通過する

分類Dev

HibernateのbeginTransactionは新しいDB接続を割り当てますか?

分類Dev

マルチスレッドでのEFコアデッドロック+ BeginTransaction + Commit

分類Dev

SQLiteConnection.BeginTransaction()は非推奨になりました

分類Dev

Hibernate session.getTransaction()。begin()とsession.beginTransaction()の違い

分類Dev

laravel5でDB :: commit()なしでDB :: beginTransactionが呼び出された場合はどうなりますか?

分類Dev

Linux rpm -Uvh(エラー:/ var / lib / rpm / __ db.000でトランザクションロックを作成できません)?

分類Dev

FragmentTransacton()またはFragmentManager.beginTransaction()がnullポインター例外に遭遇するのはなぜですか

分類Dev

LaravelでDBトランザクションを使用する方法

分類Dev

Laravel5.4セッションとAuth :: user()はコントローラーのコンストラクターでは使用できません

分類Dev

コントローラアクションは使用できません

Related 関連記事

  1. 1

    PDOのbeginTransaction

  2. 2

    Laravel 5.3 queue:work artisanコマンドのnullエラーでbeginTransaction()を取得する

  3. 3

    PDO-拡張クラスのbeginTransaction()

  4. 4

    EFコアのIsolationLevelを使用したBeginTransaction

  5. 5

    休止状態のbegintransactionスロー例外

  6. 6

    node.jsmysqlプールbeginTransaction&connection

  7. 7

    DB :: beginTransaction()とDB :: transaction()の違いは何ですか?

  8. 8

    FragmentTabhostでは、beginTransaction()。replaceによって呼び出されたフラグメントを破棄できません。

  9. 9

    LINQ BeginTransactionは新しいコンテキストで機能しますか?

  10. 10

    SqlConnection.BeginTransaction c#をモックできますか?

  11. 11

    Laravel 5.6ユニットテストnullでのメンバー関数beginTransaction()の呼び出し

  12. 12

    自動コミットを使用したC#でのBeginTransactionの操作

  13. 13

    TSQLエラー:COMMITTRANSACTIONリクエストに対応するBEGINTRANSACTIONがありません

  14. 14

    python sqlite "BEGINTRANSACTION"および "COMMIT"コマンド

  15. 15

    Dapper.IDbConnectionでBeginTransactionを使用する適切な方法

  16. 16

    PDO :: beginTransaction()は、PDO :: commit()までテーブルまたは行のロックを引き起こしますか?

  17. 17

    psql、dbコンテンツを別のコンテンツにコピーできません-トランザクションブロック内で実行できません-

  18. 18

    javahibernate-beginTransactionとcreateQueryが見つかりません

  19. 19

    エンティティフレームワークBeginTransactionを通過する

  20. 20

    HibernateのbeginTransactionは新しいDB接続を割り当てますか?

  21. 21

    マルチスレッドでのEFコアデッドロック+ BeginTransaction + Commit

  22. 22

    SQLiteConnection.BeginTransaction()は非推奨になりました

  23. 23

    Hibernate session.getTransaction()。begin()とsession.beginTransaction()の違い

  24. 24

    laravel5でDB :: commit()なしでDB :: beginTransactionが呼び出された場合はどうなりますか?

  25. 25

    Linux rpm -Uvh(エラー:/ var / lib / rpm / __ db.000でトランザクションロックを作成できません)?

  26. 26

    FragmentTransacton()またはFragmentManager.beginTransaction()がnullポインター例外に遭遇するのはなぜですか

  27. 27

    LaravelでDBトランザクションを使用する方法

  28. 28

    Laravel5.4セッションとAuth :: user()はコントローラーのコンストラクターでは使用できません

  29. 29

    コントローラアクションは使用できません

ホットタグ

アーカイブ