Asked Mar 28th, 2019 7:38 AM 335 1 2
  • 335 1 2
+3

Cách tạo ra file .env.dusk để test cùng Laravel Dusk ?

Share
  • 335 1 2

Mình đang test thử một cái login đơn giản. Mình có tạo ra một file .env.dusk.local để tạo ra một môi trường test riêng.

File .env

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=Laravel_Project
DB_USERNAME=root
DB_PASSWORD=

File .env.dusk.local

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=Laravel_Project_Test
DB_USERNAME=root
DB_PASSWORD=

LoginTest.php

   $user = User::where('email', '[email protected]')->first();
        if (!$user) {
            $user = factory(User::class)->create([
                'email' => '[email protected]',
                'password' => bcrypt('secret'),
            ]);
        }

        $this->browse(function (Browser $browser) use ($user) {
            $browser->visit('/login')
                    ->type('email', $user->email) 
                    ->type('password', 'secret')
                    ->press('Login')
                    ->assertPathIs('/home');
        });

Khi mình chạy " php artisan dusk " thì dữ liệu trong Database "Laravel_Project" bị rollback ( database rỗng ) còn trong Database "Laravel_Project_Test" thì không có gì thay đổi . Trên Terminal có thông báo lỗi :

1) Tests\Browser\LoginTest::testLogin
Illuminate\Database\QueryException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'Laravel_Project.users' doesn't exist (SQL: select * from `users` where `email` = admin@laravel.com limit 1)

  • Vậy có nghĩa là file .env.dusk.local không hề được sử dụng ? Làm sao để tạo ra một môi trường test riêng mà k ảnh hưởng đến dữ liệu của hệ thống ?
  • Khi chạy " php artisan dusk " dữ liệu sẽ bị rollback ?

Mong mọi người thông não giúp mình với ^^

2 ANSWERS


Answered Mar 29th, 2019 3:39 AM
Accepted
+3

2 câu hỏi thì bạn Tuấn trả lời rồi

Khi mình chạy " php artisan dusk " thì dữ liệu trong Database "Laravel_Project" bị rollback ( database rỗng ) còn trong Database "Laravel_Project_Test" thì không có gì thay đổi

Cái này do em bị cache gì đó thôi. Chay lệnh này là ok

php artisan cache:clear
php artisan config:clear

Note: Đặt tên bảng viết thường không dấu cho đúng convention em uây.

Share
Answered Mar 28th, 2019 3:50 PM
+5

Có chút ko đọc kỹ tài liệu 😅

Làm sao để tạo ra một môi trường test riêng mà k ảnh hưởng đến dữ liệu của hệ thống

  • Đặt tên file env là .env.dusk
  • Hoặc đặt tên file env của dusk theo cấu trúc .env.dusk.{APP_ENV}, trong đó {APP_ENV} là giá trị APP_ENV trong file .env. File này sẽ được ưu tiên hơn file .env.dusk

Tham khảo: https://laravel.com/docs/5.7/dusk#environment-handling

Khi chạy " php artisan dusk " dữ liệu sẽ bị rollback?

Dữ liệu sẽ bị rollback hay toàn bộ DB sẽ bị truncate nếu trong test case có sử dụng 1 trong 2 trait RefreshDatabase hoặc DatabaseMigrations, bạn xem lại file test case xem:

<?php

namespace Tests\Browser;

use Tests\DuskTestCase;
use Laravel\Dusk\Browser;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\RefreshDatabase;

class ExampleTest extends DuskTestCase
{
    use RefreshDatabase;
    // use DatabaseMigrations; // OR THIS

    /**
     * A basic browser test example.
     *
     * @return void
     */
    public function testBasicExample()
    {
        $this->browse(function (Browser $browser) {
            $browser->visit('/')
                    ->assertSee('Laravel');
        });
    }
}

Tham khảo:

Share
Avatar Ngô Thúy Hoa @ngothuyhoa
Mar 29th, 2019 7:16 AM

Cảm ơn 2 bạn vấn đề của mình đã được giải quyết. Do mình k clean cache nên nó vẫn sử dụng file .env => sử dụng database config trong file .env . Trong file test mình sử dụng trait DatabaseMigrations nên khi chạy dữ liệu bị rollback.

0
| Reply
Share
Viblo
Let's register a Viblo Account to get more interesting posts.