2017-01-20 31 views
0

Я пытаюсь проверить мою систему Laravel, используя свойство DatabaseTransactions. Проблема в том, что он откатывает транзакцию только после того, как все тесты на TestCase были запущены. Возможно ли иметь новый экземпляр базы данных для каждого теста в TestCase?DatabaseTransactions после каждого теста

Этот тестовый пример иногда возвращает все зеленые, но иногда нет. Когда он выполняет тест, поскольку они написаны, все идет хорошо, но когда порядок отменяется, первый из них терпит неудачу, потому что один 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); 
} 
+0

вы можете использовать метод 'setUp()'. – yivi

ответ

0

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

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()); 

Два Ведет были получены с случайным LeadType (через модель завода), поэтому были предприняты некоторые попытки, когда были созданы более потенциальные выводы.

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

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

  3. DatabaseTransactions черта делает откат после каждого теста, а не после всех испытаний

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

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

+0

1. Я знаю. Я написал фиктивный тест, чтобы посмотреть, что произойдет. 3. Почему тесты иногда возвращают true, а иногда и false? – Alan