phpunit не позволяет утверждать, что два массива равны, но не показывает разницы

Вот что говорит phpunit:

1) Asgard\Entity\Tests\EntityTest::testToArray Failed asserting that two arrays are equal. --- Expected +++ Actual @@ @@ Array ( 'id' => null 'title' => 'Test Title' 'content' => 'Test Content' 'published' => 2015-03-04T11:19:50+0000 'comments' => Array ( 0 => Array ( 'id' => null 'content' => 'foo' 'published' => 2015-03-04T11:19:50+0000 'another_property' => null 'news' => null ) 1 => Array ( 'id' => null 'content' => 'bar' 'published' => 2015-03-04T11:19:50+0000 'another_property' => null 'news' => null ) 2 => Array ( 'id' => null 'content' => 'baz' 'published' => 2015-03-04T11:19:50+0000 'another_property' => null 'news' => null ) ) 'another_property' => null ) 

https://travis-ci.org/asgardphp/asgard/jobs/53029084

Между «ожидаемым» и «фактическим» нет разницы. Обычно тесты проходят, но иногда это терпит неудачу.

Нашел вопрос. Элементы были не в том же порядке. Немного раздражает, хотя выход не показывает его.

Я заменил assertEquals:

 $this->assertTrue($this->similar_arrays($arr1, $arr2)); protected function similar_arrays($a, $b) { if(is_array($a) && is_array($b)) { if(count(array_diff(array_keys($a), array_keys($b))) > 0) return false; foreach($a as $k => $v) { if(!$this->similar_arrays($v, $b[$k])) return false; } return true; } else return $a === $b; } 

Поскольку вы используете DateTime в своих тестах – вы уверены, что не получаете тест, который начинается через одну секунду, а заканчивается в другом, так что есть вторая разница в метках времени, в зависимости от того, на каком этапе вы их смотрите? – Использование динамических дат и времени в тестах – довольно распространенная причина случайных неудачных тестов.

Проверьте, есть ли у вас EOL в ваших значениях.

Если у вас есть такое значение:

 'x' => 'line1 

line2'

измените его на

 'x' => "line1\nline2" 

Примечание: это может не отвечать на прямой вопрос, который имел OP, но это то, что сработало для меня.