Как выполнить модульное тестирование приложения Laravel без возможности переноса таблиц, поскольку миграции обрабатываются другим приложением - PullRequest
0 голосов
/ 30 сентября 2018

Я недавно указал существующему проекту laravel на использование новой базы данных postgres.Новая база данных postgres поддерживается приложением Rails API, которое выполняет все миграции для него.

У меня вопрос с этой настройкой, каков наилучший способ юнит-тестирования проекта laravel.В настоящее время все существующие модульные тесты не работают, поскольку все они сохранены в БД с использованием

use DatabaseMigrations;

. Приложение Laravel больше не будет выполнять миграцию, но все еще напрямую обращается к БД и в настоящее время не собираетсячерез API Rails для доступа к данным.

Должен ли я макетировать запросы БД в моих модульных тестах?

или

Поскольку я все еще могу запускать модульные тесты, которые попадают в БД, если тестовая база данных postgres уже перенесена с таблицами (через приложение rails, переносящее тестовую БД), есть ли способочистить БД после запуска модульного теста без возможности отбросить и перенести таблицы?Могу ли я как-то использовать транзакции и откатить все транзакции, которые я сделал в определенном модульном тесте?

Спасибо

1 Ответ

0 голосов
/ 30 сентября 2018

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

В классах теста Laravel вместо

use DatabaseMigrations;

Вы можете использовать

use DatabaseTransactions;

Это будет использовать текущие таблицы, которые находятся в вашей БД.В моем случае я указываю, чтобы мои тесты использовали конкретную БД, которую я настроил для тестирования, под названием «my_project_test» (при условии, что обычная БД приложения будет называться «my_project»), где я уже перенес / создал таблицы.После завершения теста он «откатит» / вернет все данные, которые вы вставили или удалили из БД, чтобы вернуть их в прежнее состояние.Утверждения должны действовать одинаково, если вы используете DatabaseMigrations или DatabaseTranactions.Просто убедитесь, что ваша тестовая БД полностью обновлена.

Пример того, как будет выглядеть класс ...

use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Illuminate\Routing\Route;

class UserControllerTest extends TestCase
{   
    //Instead of DatabaseMigrations use DatabaseTransactions instead.
    //use DatabaseMigrations; 
    use DatabaseTransactions;

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