我正在尋找在我的 Laravel 專案中使用 PHPUnit 測驗物件陣列的解決方案。
這是我的干草堆陣列:
[
[
"id" => 10,
"name" => "Ten"
],
[
"id" => 5,
"name" => "Five"
]
]
這是 needles 陣列:
[
[
"id" => 5,
"name" => "Five"
],
[
"id" => 10,
"name" => "Ten"
]
]
物件的順序無關緊要,物件的鍵也無關緊要。唯一的問題是我們有兩個物件,所有物件都具有完全相同的鍵和完全相同的值。
什么是正確的解決方案?
uj5u.com熱心網友回復:
您可以使用以下assertContainsEquals方法執行此操作:
$haystack = [
[
'id' => 10,
'name' => 'Ten'
],
[
'id' => 5,
'name' => 'Five'
]
];
$needles = [
[
'name' => 'Five',
'id' => 5
],
[
'id' => 10,
'name' => 'Ten'
]
];
foreach ($needles as $needle) {
$this->assertContainsEquals($needle, $haystack);
}
如果您打算更頻繁地執行斷言,您也可以創建自己的斷言方法:
public function assertContainsEqualsAll(array $needles, array $haystack): void
{
foreach ($needles as $needle) {
$this->assertContainsEquals($needle, $haystack);
}
}
uj5u.com熱心網友回復:
基于@Roj Vroemen的回答,我為完全匹配斷言實作了這個解決方案:
public function assertArrayContainsEqualsOnly(array $needles, array $haystack, string $context = ''): void
{
foreach ($needles as $index => $needle) {
$this->assertContainsEquals(
$needle,
$haystack,
($context ? $context . ': ' : '') . 'Object not found in array.'
);
unset($haystack[$index]);
}
$this->assertEmpty(
$haystack,
($context ? $context . ': ' : '') . 'Not exact match objects in array.'
);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/477575.html
標籤:拉拉维尔 单元测试 phpunit laravel 测试
