База данных транзакций после каждого теста

Я пытаюсь протестировать свою систему 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);
}

1

Решение

  1. Прежде всего, этот тест на самом деле не является тестом: $this->assertTrue(true);, Если вы хотите проверить, было ли создано руководство, вы должны были использовать, $this->assertTrue($lead->exists());

  2. Если вы хотите запустить модульные тесты в определенном порядке, вы можете использовать @зависит аннотирование

  3. DatabaseTransactions Черта делает откат после каждого теста, а не после всех тестов

  4. Вы можете использовать DatabaseMigrations черта, если вы хотите перенести и перенести откат до и после каждого теста, а не заключать их в транзакции

  5. Если вы хотите использовать пользовательские методы настройки и разрыва, используйте afterApplicationCreated а также beforeApplicationDestroyed методы вместо того, чтобы зарегистрировать обратные вызовы

2

Другие решения

Я нашел свою ошибку. Это терпело неудачу, потому что, когда я делал это:

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 (через фабрику моделей), поэтому было несколько попыток создать больше потенциальных потенциальных клиентов.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector