Тест PHPUnit — не удалось подтвердить, что фактический размер 11935 соответствует ожидаемому размеру 3

Я новичок в 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 метод, который я знаю, мне нужно для покрытия кода. Кто-нибудь видит, что мне не хватает, что приведет к ошибке в заголовке?

1

Решение

Если вам нужно проверить разница после запуска вашего 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()Сравниваешь цифры.

2

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

Я не знаю всей вашей истории, но я предполагаю, что вашей первой ошибкой было то, что вы не создали тестовую базу данных.
Итак, это будет первый шаг — в дополнение к вашему 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

Да, это глупо, но это должно работать …

0