我是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
方法最为困惑,我知道我需要代码覆盖。有人看到我错过了会在标题中产生错误的内容吗?
答案 0 :(得分:2)
如果您需要在运行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()
。
答案 1 :(得分:0)
我不知道您的整个故事,但我认为您的第一个错误是您没有创建测试数据库。
所以,这将是第一步 - 除了您的databaseName(无论名称)创建databaseName_test
还有一些其他步骤要做 - 在您的env文件中将databaseName的名称更改为databaseName_testing - 但仅在您进行测试时(然后立即回滚到原始databaseName)。
然而,问题仍然存在(PHP单元不是一个完美的工具,就像PHP一样),这就是可以提供帮助的黑客。
而不是:
$this->assertEquals(3, $difference);
写:
$this->assertEquals(11935, $difference); //the number is specific for your case
是的,这很愚蠢,但应该有用......