How to specify a different .env file for phpunit in Laravel 5?

前端 未结 10 2337
礼貌的吻别
礼貌的吻别 2020-12-29 05:25

I have a .env file containing my database connection details, as is normal for Laravel 5. I want to override these for testing, which I can do in phpunit.

10条回答
  •  一整个雨季
    2020-12-29 06:05

    From this link

    Method 1

    Step 1: Create New Test Database Connection on Database/Config.php as below:

    return [
        ... 
    
        'default' => env('DB_CONNECTION', 'db'),    
    
        'connections' => [
            'sqlite_testing_db' => [
                'driver' => 'sqlite',
                'database' => storage_path().'/testing_database.sqlite',           
                'prefix' => '',
            ],
    
            /**************** OR ******************/
    
            'testing_db' => [
                'driver' => 'mysql',
                'host' => env('TEST_DB_HOST', 'localhost'),
                'database' => env('TEST_DB_DATABASE', 'forge'),
                'username' => env('TEST_DB_USERNAME', 'forge'),
                'password' => env('TEST_DB_PASSWORD', ''),
                'charset' => 'utf8',
                'collation' => 'utf8_unicode_ci',
                'prefix' => '',
                'strict' => false,
            ],
    
            /** Production or database DB **/
            'db' => [
                'driver' => 'mysql',
                'host' => env('TEST_DB_HOST', 'localhost'),
                'database' => env('TEST_DB_DATABASE', 'forge'),
                'username' => env('TEST_DB_USERNAME', 'forge'),
                'password' => env('TEST_DB_PASSWORD', ''),
                'charset' => 'utf8',
                'collation' => 'utf8_unicode_ci',
                'prefix' => '',
                'strict' => false,
            ],
        ],
    ];
    

    Step 2: Specify the Database Credential on .env file

    TEST_DB_HOST=localhost
    TEST_DB_DATABASE=laravel
    TEST_DB_USERNAME=root
    TEST_DB_PASSWORD=rootwdp
    

    Step 3: Specify test db conection to be used on phpunit.xml.

    
              OR Below If you prefer sqlite
                    
    

    Step 4: Migrate database to this new testing database - if you choose to use Database Transaction to Rollback insertion on the table.

    php artisan migrate --database=testing_db
    
    //If using sqlite
    touch storage/testing_database.sqlite
    php artisan migrate --database=sqlite_testing
    

    Step 5: Now, the Unit test with Database Transaction looks like below:

    create();
    
            $users = User::all();
    
            $this->assertEquals(2, $users->count());
        }
    }
    
    //Run Php Unit
    -> vendor/bin/phpunit --color tests/acceptance/model/UserTest.php
    

    Note: If you prefer not to use Database Transaction, you can use setup and teardown method on TestCase.php class to migrate and rollback the database as below:

提交回复
热议问题