Выполняю некоторые тесты в моем приложении Laravel, и у меня периодически возникают сбои из-за того, что один из столбцов моей базы данных определен как FLOAT
. При запуске теста с assertDatabaseHas()
иногда происходит сбой из-за неопределенности с плавающей запятой.
<?php
namespace Test\Unit;
use App\Foo;
class MyModelTest extends TestCase
{
public function testFooCanBar(): void
{
$stringvalue = "baz";
$floatvalue = 234.281;
$data = [
"name" => $stringvalue,
"data" => $floatvalue,
];
Foo::bar($stringvalue, $floatvalue);
$this->assertDatabaseHas("foos", $data);
}
}
Иногда результат:
Failed asserting that a row in the table [foos] matches the attributes {
"name": "baz",
"data": 234.281
}.
Found similar results: [
{
"name": "baz",
"data": 234.280999999999999995
}
]
Я могу вспомнить несколько способы обойти это (изменить столбец на INT
и умножить на 10 ^ x или просто удалить столбец из сравнения), но мне интересно, есть ли какие-то методы, которые я пропустил, чтобы правильно проверить это. При непосредственном сравнении значений мы можем использовать PHPUnit assertEqualsWithDelta()
; Есть ли что-нибудь подобное для проверки базы данных?