Как в Laravel правильно тестировать методы контроллера, которые взаимодействуют с БД?

Друзья, всем привет.
Дали задачу по написанию юнит-тестов для контроллеров на Ларавел.

Тесты по assertStatus, assertViewHas - написал.
Теперь нужно написать тесты для остальных методов контроллера, но возникают вопросы, погуглив, исчерпывающие ответы не нашел.. Помогите, пожалуйста!
Вот несколько методов для теста:
1.
class BugsController extends Controller
{
    public function track(Request $request) {
        if(Bug::create([
            'title' => $request->data['title'],
            'note' => $request->data['note']
        ])) { return ['data' => 'Bug tracked']; }
        else { return ['data' => 'Something went wrong']; }
    }

Если тестировать этот метод, то он произведет запись в БД. А если мне этого не нужно, нужно мокать? (нашел инфу, что некоторые используют тестовую БД, но такой подход тоже не подходит..)
Мог бы кто-нибудь накидать пример теста этого метода плз?

2)
class AccountsController extends Controller
{     
public function status(Request $request)
    {
        $id = $request->input('account_id');
        $status = $request->input('status');
        $account = Account::where('id', $id)->first();

        if ($account->update(['user_status_id' => $status])) {
            \Session::flash('status', 'Status updated');
        } else {
            \Session::flash('error', 'Something went wrong');
        }

        return redirect()->route('accountlist');
    }
}

тут в принципе, понятно: через this->call() обращаюсь к route, передаю post-данные.. В конце проверю на редирект.
как быть с БД снова? Не хочется, чтобы менялась какая-то инфа в БД..

Направьте, пожалуйста, на путь истинный) Заранее спасибо!
  • Вопрос задан
  • 133 просмотра
Пригласить эксперта
Ответы на вопрос 2
Rikcon
@Rikcon
А почему не подходит тестовая БД ?
Просто при запуске тестов написать скрипток который дампит боевую базу ( лучше конечно нагенерить через Faker)
в тестовую и там чекайте меняйте что хотите.
Ответ написан
dark1112
@dark1112
Web developer
Вы могли бы использовать трейт Illuminate\Foundation\Testing\DatabaseTransactions, он откатывает изменения внесённые в БД во время теста.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы