Laravel: не удается пройти тест браузера с помощью признака RefreshDatabase
Мой тест не пройдёт, если я использую признак RefreshDatabase.
Без признака - тест пройдет, но данные остаются в базе данных.
Я использую:
- Laravel 5.5 (свежий)
- Ларадок: nginx mysql селен
Тесты выполняются из рабочего пространства Ларадока.
Это тест, простой, из официальной документации.
<?php
namespace Tests\Browser;
use App\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Laravel\Dusk\Browser;
use Tests\DuskTestCase;
class LoginTest extends DuskTestCase
{
use RefreshDatabase;
/**
* A Dusk test example.
*
* @return void
*/
public function testLogin()
{
$user = factory(User::class)->create();
// dump('wait...');
// sleep(15);
// dump('go!');
$this->browse(function (Browser $browser) use ($user) {
$browser->visit('/login')
->type('email', $user->email)
->type('password', 'secret')
->press('Login')
->assertPathIs('/home')
;
});
}
}
dump/sleep/dump
просто посмотреть, был ли пользователь создан в базе данных. Это не!
Результат php artisan dusk
является:
There was 1 failure:
1) Tests\Browser\LoginTest::testLogin
Failed asserting that '/login' matches PCRE pattern "/^\/home/u".
/var/www/vendor/laravel/dusk/src/Concerns/MakesAssertions.php:53
/var/www/tests/Browser/LoginTest.php:32
/var/www/vendor/laravel/dusk/src/TestCase.php:92
/var/www/tests/Browser/LoginTest.php:34
НОТА:
Утверждение текста "Эти учетные данные не соответствуют нашим записям." будет правдой, поэтому я считаю, что пользователь никогда не был создан.
3 ответа
В документе Laravel Dusk упоминается:
Большинство написанных вами тестов будут взаимодействовать со страницами, извлекающими данные из базы данных вашего приложения; однако ваши тесты Dusk никогда не должны использовать эту черту. Черта использует транзакции базы данных, которые не будут применимы или недоступны для HTTP-запросов. Вместо этого используйте трейт, который повторно мигрирует базу данных для каждого теста:
Таким образом, ответ использует
DatabaseMigrations
вместо
RefreshDatabase
Использование DatabaseMigrations
черта вместо RefreshDatabase
черта характера.
Не думаю, что проблема в драйвере sqlite / pgsql / whateversql. И я уверен, что вам не нужно ставить что-то вроде$app['config']...
линии к \Tests\CreatesApplication::createApplication
.
Я решил эту проблему бегом artisan config:clear
перед artisan serve
. Будет создан новый файл phpunit.dusk.xml, который будет перенаправлен на.env.dusk.{env}
, а затем повторно выполните команду сумерек.