Я новичок в phpunit и пытаюсь написать тест, который утверждает, что были созданы три заметки, но я получаю все заметки из БД.
/** @test */
public function it_gets_notes()
{
$address = Address::first();
$notes = factory(AddressNote::class, 3)->create(['address_id'
=> $address->id]);
$found = $this->notesClass->getData(['address_id' => $address-
>id]);
$this->assertCount(3, $found);
}
}
Модели Address и AddressNote работают правильно. Я думаю, что я больше всего смущен getData
метод, который я знаю, мне нужно для покрытия кода. Кто-нибудь видит, что мне не хватает, что приведет к ошибке в заголовке?
Если вам нужно проверить разница после запуска вашего create
метод, затем сохранить $found
до и после их добавления, и вычитанием будет ваш номер:
public function it_gets_notes()
{
$address = Address::first();
$found = $this->notesClass->getData(['address_id' => $address->id]);
$notes = factory(AddressNote::class, 3)->create(['address_id' => $address->id]);
$foundAfter = $this->notesClass->getData(['address_id' => $address->id]);
$difference = count($foundAfter) - count($found);
$this->assertEquals(3, $difference);
}
Обратите внимание, что вам нужно использовать assertEquals()
с 3 и разница теперь вместо assertCount()
Сравниваешь цифры.
Я не знаю всей вашей истории, но я предполагаю, что вашей первой ошибкой было то, что вы не создали тестовую базу данных.
Итак, это будет первый шаг — в дополнение к вашему DatabaseName (независимо от имени) создайте databaseName_test.
Есть еще несколько шагов: в вашем файле env измените имя databaseName на databaseName_testing — но только во время тестирования (а затем сразу же вернитесь к исходному databaseName).
Тем не менее, проблема все еще может сохраняться (PHP Unit не идеальный инструмент, как и PHP), и здесь есть способ, который может помочь.
Вместо:
$this->assertEquals(3, $difference);
записывать:
$this->assertEquals(11935, $difference); //the number is specific for your case
Да, это глупо, но это должно работать …