symfony 使用PHPUnitAssertJSON中的浮点数时出错

zaq34kh6  于 2023-01-31  发布在  PHP
关注(0)|答案(1)|浏览(89)

**上下文:**我使用Symfony和API Platform创建了一个应用程序,并且正在编写API测试

我有一个名为“cost”的属性,它是实体中的一个浮点数:

#[ApiResource()]
class MyEntity {
...
    #[ORM\Column(nullable: true)]
    private ?float $cost = null;
..
}

此属性在我的Postgres DB(由Doctrine管理)中存储为“双精度”。
此实体作为API平台生成的API端点。我编写了测试来检查值是否正确:

public function testGetSingleMyEntity(): void
{
...
$client->request('GET', '/api/my_entity/'.$myentity->getId());
$this->assertJsonContains([
    "cost" => $myentity->getCost()
]);
...
}

但是当我运行测试时,我遇到了这个错误:

3) App\Tests\Api\MyEntityTest::testGetSingleMyEntity
Failed asserting that an array has the subset Array &0 (
    'cost' => 25.0
--- Expected
+++ Actual
@@ @@
-  'cost' => 25.0,
+  'cost' => 25,

我试着用(float)或floatval来转换cost的值,但我没有做任何改变,因为它已经是一个浮点数了。
我不明白这是API平台的类型格式错误还是因为我犯了一个错误?
如果有人能告诉我这是怎么回事我会很感激的。
谢谢

rdrgkggo

rdrgkggo1#

为了解决这个问题,我不得不将物业成本的类型改为“decimal”。它现在作为numeric(10,2)存储到DB中,并在PHP中作为字符串处理:

#[ApiResource()]
class MyEntity {
...
    #[ORM\Column(type: "decimal", precision: 10, scale: 2, nullable: true)]
    private ?string $cost = null;

    public function getCost(): ?string
    {
        return $this->cost;
    }

    public function setCost(?string $cost): self
    {
        $this->cost = $cost;

        return $this;
    }
...
}

相关问题