Cách tạo ra file .env.dusk để test cùng Laravel Dusk ?
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
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.
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:
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.