Yêu cầu thg 3 28, 2019 7:38 SA 421 1 2
  • 421 1 2
+3

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

Chia sẻ
  • 421 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', 'admin@laravel.com')->first();
        if (!$user) {
            $user = factory(User::class)->create([
                'email' => 'admin@laravel.com',
                '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 CÂU TRẢ LỜI


Đã trả lời thg 3 29, 2019 3:39 SA
Đã được chấp nhận
+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.

Chia sẻ
Đã trả lời thg 3 28, 2019 3:50 CH
+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:

Chia sẻ
Avatar Ngô Thúy Hoa @ngothuyhoa
thg 3 29, 2019 7:16 SA

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.

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí