При запуске --coverage-html в phpunit тест не проходит, хотя этого не должно быть

У меня есть тест, который всегда проходит, если я запускаю phpunit, но не проходит, если я запускаю phpunit --coverage-html.

Одним из ключевых моментов в этом тесте является то, что я проверяю порядок. Похоже, что порядок меняется, когда я запускаю освещение. Что делает --coverage, что может повлиять на выполнение моего кода?

Версии:

  • PHP 7.1.15
  • PHPUnit 6.5.6
  • Laravel 5.5.34

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,
                    ]
                ],
            ]);
    }

Какая у вас ошибка? Вы можете попробовать --coverage-text вместо btw ...

Bart 11.05.2018 00:55

@Bart К сожалению, отчеты о покрытии не работают. Ошибка заключается в отказе assertJson при заказе.

hdifen 11.05.2018 15:58

Я предполагаю, что вы передаете assertStatus (200), и это нормально. Затем сбросьте свой ответ от user/invites/list, сравните и измените свое предположение json, чтобы оно соответствовало ...

Bart 11.05.2018 16:04

@ Барт Да, вот в чем проблема. Порядок меняется, если я запускаю phpunit с покрытием. Он работает правильно, если я не добавляю флаг покрытия.

hdifen 11.05.2018 23:03
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
4
334
1

Ответы 1

Это закончилось проблемой с заказом.

Когда вы запускаете покрытие, время тестирования значительно увеличивается. Это привело к тому, что создание моих фабрик заняло больше времени, что также означало, что время created_at было на миллисекунды меньше, чем обычно.

Я исправил это, жестко закодировав значение created_at в моем тесте.

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

hakre 14.05.2018 00:07

Другие вопросы по теме