Переписать черту в Laravel, чтобы изменить поведение заката.

У меня есть проект Laravel 5.4, и я пытаюсь использовать Dusk для запуска некоторого теста. Я хочу сбросить, перенести и запустить перед выполнением теста. Я настроил его на использование SQLite и в идеале хочу запустить его в памяти, но физический файл тоже подойдет.

Я смог получить то, что хочу, изменив Illuminate \ Foundation \ Testing \ DatabaseMigrations;
Originial:

public function runDatabaseMigrations()
{
$this->artisan('migrate');

$this->app[Kernel::class]->setArtisan(null);

$this->beforeApplicationDestroyed(function () {
$this->artisan('migrate:rollback');
});
}

Моя версия:

public function runDatabaseMigrations()
{
$this->artisan('migrate:refresh');
$this->artisan('db:seed');

$this->app[Kernel::class]->setArtisan(null);

$this->beforeApplicationDestroyed(function () {
$this->artisan('migrate:rollback');
});
}

Но, конечно, я потеряю это с некоторыми будущими обновлениями, поэтому мне нужно переопределить мою черту.

Я скопировал эту черту в App \ Traits \ DatabaseMigrations.php и изменил пространство имен.

<?php

namespace App\Traits;

use Illuminate\Contracts\Console\Kernel;

trait DatabaseMigrations
{
/**
* Define hooks to migrate the database before and after each test.
*
* @return void
*/
public function runDatabaseMigrations()
{
$this->artisan('migrate:refresh');
$this->artisan('db:seed');

$this->app[Kernel::class]->setArtisan(null);

$this->beforeApplicationDestroyed(function () {
$this->artisan('migrate:rollback');
});
}
}

MyTest.php выглядит следующим образом:

<?php

namespace Tests\Browser;

use App\User;

use Tests\Browser\Pages\Dashboard;

use Tests\DuskTestCase;
use Laravel\Dusk\Browser;
//use Illuminate\Foundation\Testing\DatabaseMigrations;
use App\Traits\DatabaseMigrations;

class MyTest extends DuskTestCase
{
use DatabaseMigrations;

но это не работает Я получаю ошибку:
PDOException: SQLSTATE [HY000]: общая ошибка: 1 нет такой таблицы: пользователи

Так или иначе, миграции не запускаются без ошибок по этому поводу, но в результате мой тест не проходит, потому что нет таблиц.

Что работает, так это:

<?php

namespace Tests\Browser;

use App\User;

use Tests\Browser\Pages\Dashboard;

use Illuminate\Contracts\Console\Kernel;

use Tests\DuskTestCase;
use Laravel\Dusk\Browser;
use Illuminate\Foundation\Testing\DatabaseMigrations;
// use App\Traits\DatabaseMigrations;

class WorkshopRegistrationTest extends DuskTestCase
{

public function runDatabaseMigrations()
{
$this->artisan('migrate:refresh');
$this->artisan('db:seed');

$this->app[Kernel::class]->setArtisan(null);

$this->beforeApplicationDestroyed(function () {
$this->artisan('migrate:rollback');
});
}

use DatabaseMigrations;

но мне не нравится помещать этот метод в каждый тестовый файл. Кто-нибудь знает, почему один метод работает, а другой нет? Первый метод кажется мне, с небольшим знанием ООП, совершенно нормальным.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]