В проекте Larravel нет сценариев миграции для базы данных.Обрабатывает ли `Illuminate \ Foundation \ Testing \ RefreshDatabase` это и как? - PullRequest
1 голос
/ 03 июля 2019

Я унаследовал проект laravel для обслуживания и по разным необъяснимым мне причинам (предыдущие разработчики ушли, без возможности связаться с ними) не имеет миграций базы данных для него.

В моей базе кода у меня естьбыло поручено увеличить покрытие кода для тестов.Но тесты между ними не имеют никакой изоляции, поэтому, в отличие от этого [ответа] [1], некоторые из них могут потерпеть неудачу по этой причине.

Чтобы решить эту проблему, я нашел это [решение][2] предоставлено самим laravel:

namespace Tests\Feature;

use Tests\TestCase;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithoutMiddleware;

class ExampleTest extends TestCase
{
    use RefreshDatabase;

    /**
     * A basic functional test example.
     *
     * @return void
     */
    public function testBasicExample()
    {
        // Test something here
    }
}

Но в моем обосновании есть следующая проблема:

Работает ли этот подход без сценариев миграции, если нет, то как я могу преодолеть проблему?

И для этого мне нужен ваш вклад, чтобы удалить его.

[1] https://softwareengineering.stackexchange.com/a/394148/249660

[2] https://laravel.com/docs/5.8/database-testing#resetting-the-database-after-each-test

1 Ответ

0 голосов
/ 03 июля 2019

Черта RefreshDatabase не будет работать в этом случае, потому что она выполняет php artisan migrate:fresh перед каждым тестом, но нет сценариев миграции для выполнения.

Рассматривали ли вы использовать Illuminate\Foundation\Testing\DatabaseTransactionsчерта характера?Это обернет каждый тест в транзакции базы данных и, вероятно, даст вам достаточно изоляции.Он не использует миграцию.

use Illuminate\Foundation\Testing\DatabaseTransactions;

class ExampleTest extends TestCase
{
    use DatabaseTransactions;

    ...

При таком подходе ваша тестовая база данных, конечно, должна быть настроена со всеми созданными таблицами, и вы должны вручную изменять / переносить тестовую базу данных при добавлении новой таблицы..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...