【发布时间】:2018-08-31 04:04:32
【问题描述】:
在 Laravel 中进行集成测试(使用数据库)时。断言同一 Eloquent 模型的两个实例相同的最佳方法是什么?
AssertEquals $model $model
简单地使用->assertEquals($modelOne, $modelTwo); 不会起作用,因为即使它们是相同的 PHPUnit 检查类属性,例如 wasRecentlyCreated 并且有时模型 ids 可以是字符串或整数。 p>
AssertEquals $model->id $model->id
这里的问题是模型一可能是另一个模型的实例,例如:
AssertEquals(Person::find(1)->id, Animal::find(1)->id); 返回真。
AssertEquals $model->toArray() $model->toArray()
这里的问题是属性并不总是被转换为相同的类型,我不是 100% 确定为什么,但有时模型属性将是 int,而其他时候是数字 string
AssertEquals($address->toArray(), $user->address->toArray())
[ postcode => 2454 ]
[ postcode => "2454" ]
如何以简单、干净和可重复的方式断言两个 Eloquent 模型是同一个数据库记录?
【问题讨论】:
-
您只想比较从数据库中获得的新模型吗?
-
您能否为您要测试的内容添加一些上下文?您是在测试
Model::create()之类的内容是否正确持久化,还是...? -
@AkenRoberts 不,我不会,因为这会使这个问题特定于我的用例,而不是 stackoverflow 的用途。这个问题很简单且重点突出,应该保持这种方式
标签: php laravel testing types phpunit