Я пытаюсь протестировать свою систему Laravel, используя черту DatabaseTransactions. Проблема в том, что откат транзакции происходит только после запуска всех тестов на TestCase. Можно ли иметь свежий экземпляр базы данных для каждого теста в TestCase?
Этот тестовый случай иногда возвращает все зеленое, но иногда нет. Когда он выполняет тест по мере их написания, все идет хорошо, но при обратном порядке первый сбой, потому что один Lead был создан ранее. Что я могу сделать?
public function testPotentialLeads()
{
factory(Lead::class)->create(['lead_type' => LeadType::POTENTIAL]);
factory(Lead::class)->create();
factory(Lead::class)->create();
$potential_leads = Lead::potentials()->get();
$this->assertEquals(1, $potential_leads->count());
$this->assertEquals(3, Lead::all()->count());
}
public function testAnotherLeadFunction()
{
$lead = factory(Lead::class)->create();
$this->assertTrue(true);
}
Прежде всего, этот тест на самом деле не является тестом: $this->assertTrue(true);
, Если вы хотите проверить, было ли создано руководство, вы должны были использовать, $this->assertTrue($lead->exists());
Если вы хотите запустить модульные тесты в определенном порядке, вы можете использовать @зависит аннотирование
DatabaseTransactions
Черта делает откат после каждого теста, а не после всех тестов
Вы можете использовать DatabaseMigrations
черта, если вы хотите перенести и перенести откат до и после каждого теста, а не заключать их в транзакции
Если вы хотите использовать пользовательские методы настройки и разрыва, используйте afterApplicationCreated
а также beforeApplicationDestroyed
методы вместо того, чтобы зарегистрировать обратные вызовы
Я нашел свою ошибку. Это терпело неудачу, потому что, когда я делал это:
factory(Lead::class)->create(['lead_type' => LeadType::POTENTIAL]);
factory(Lead::class)->create();
factory(Lead::class)->create();
$potential_leads = Lead::potentials()->get();
$this->assertEquals(1, $potential_leads->count());
$this->assertEquals(3, Lead::all()->count());
Два Lead были сгенерированы случайным образом с LeadType (через фабрику моделей), поэтому было несколько попыток создать больше потенциальных потенциальных клиентов.