1

Есть ли способ сделать метод setUp() и tearDown(), который говорит laravel что-то вроде «сделать все эти вставки в базе данных, но когда вы закончите все тесты, удалите все вставки без сброса базы данных»Laravel 5 Тестирование с помощью phpUnit без сброса моей базы данных

мне нужно сделать анализы, как это:

/** @test */ 
public function testRegistration(){ 

    $account = [ 
    'name'  => 'test', 
    'email' => '[email protected]', 
    'password' => '123451234' 
    ]; 

    $this->visit('/register') 
     ->type($account['name'],'name') 
     ->type($account['email'],'email') 
     ->type($account['password'],'password') 
     ->type($account['password'],'password_confirmation') 
     ->press('Register') 
     ->seePageIs('/home'); 
} 

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

Проблема заключается в том, что я не может просто сбросить свою базу данных, я уже 12,000 строк, вставленных в моей базе данных, и я не может создать test_database, потому что мне нужно эти 12.000 строк, вставленных в моем приложении имеет смысл ,

Я не нашел никакой информации, которую могу использовать, все, что я могу найти, это «сделать миграцию тестового вызова: обновить и отправить 4 минуты, чтобы заполнить таблицу снова», но я уверен, что это возможно найти лучшее решение!

Кроме того, где я могу поместить свой метод setUp() и где я его называю?

спасибо.

ответ

1

См. this и этот documentation (работает со сделкой).

Эта черта только завершает соединение базы данных по умолчанию в транзакции.

Другими словами, вставка будет «подделана», поэтому вам не придется ее удалять каждый раз.

Другой вариант - добавить еще один тест, в котором вы удаляете каждую введенную вами вставку.

User::where('name', 'test')->where('email','[email protected]')->delete(); 
+0

Спасибо, именно то, что мне нужно! –