У меня есть тест, который всегда проходит, если я запускаю phpunit, но не проходит, если я запускаю phpunit --coverage-html.
Одним из ключевых моментов в этом тесте является то, что я проверяю порядок. Похоже, что порядок меняется, когда я запускаю освещение. Что делает --coverage, что может повлиять на выполнение моего кода?
Версии:
Phpunit тест
public function testGetAUsersInvites()
{
$carbon = \Carbon\Carbon::create();
$user = factory(User::class)->create();
$user->invites()->saveMany(factory(Invite::class, 7)->make());
// Users who are a part of the communication
$communciationUsers = factory(User::class, 2)->create();
// Save users to the communication
$user->invites()->each(function($invite) use ($communciationUsers, $carbon) {
$invite->communication->users()->attach($communciationUsers);
// Added some messages
$invite->communication->messages()->save(factory(Message::class)->make([
'messageType' => 'subject',
'created_at' => $carbon->subDays($invite->id) // force created date so we can predict the ordering
]));
});
$invite = $user->invites->first();
$lastInvite = $user->invites->last();
Passport::actingAs($user, ['full'], 'api');
$this->get(self::URL . 'user/invites/list', ['Accept' => 'application/json'])
->assertStatus(200)
->assertJson([
"data" => [
[
"id" => $invite->id,
],
[],[],[],[],[]
[
"id" => $lastInvite->id,
]
],
]);
}
@Bart К сожалению, отчеты о покрытии не работают. Ошибка заключается в отказе assertJson при заказе.
Я предполагаю, что вы передаете assertStatus (200), и это нормально. Затем сбросьте свой ответ от user/invites/list, сравните и измените свое предположение json, чтобы оно соответствовало ...
@ Барт Да, вот в чем проблема. Порядок меняется, если я запускаю phpunit с покрытием. Он работает правильно, если я не добавляю флаг покрытия.






Это закончилось проблемой с заказом.
Когда вы запускаете покрытие, время тестирования значительно увеличивается. Это привело к тому, что создание моих фабрик заняло больше времени, что также означало, что время created_at было на миллисекунды меньше, чем обычно.
Я исправил это, жестко закодировав значение created_at в моем тесте.
У IIRC carbon есть возможность для тестов фиксировать время в специальном тестовом режиме, чтобы время как скрытая зависимость имело меньше побочных эффектов. Возможно, это то, что вы сделали, это не так ясно из вашего ответа, который вы сделали (как в коде), поэтому это может быть полезно для вас: carbon.nesbot.com/docs/#api-testing
Какая у вас ошибка? Вы можете попробовать --coverage-text вместо btw ...