PHPUnit 测试 - 无法断言实际大小 11935 与预期大小 3 匹配

PHPUnit test - Failed asserting that actual size 11935 matches expected size 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 方法,我知道我需要它来覆盖我的代码。有人看到我遗漏的内容会在标题中产生错误吗?

如果您需要检查 差异 在 运行 您的 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_test.
还有一些其他的步骤要做——在你的 .env 文件中,将 databaseName 的名称更改为 databaseName_testing——但只有在你进行测试时(然后立即回滚到你原来的 databaseName)。
然而,问题仍然存在(PHP Unit 不是一个完美的工具,就像 PHP 一样),这里是可以提供帮助的技巧。
而不是:

    $this->assertEquals(3, $difference);

写入:

    $this->assertEquals(11935, $difference); //the number is specific for your case

是的,这很愚蠢,但它应该有用...