Тестирование Lumen с PHPUnit показывает слишком много утверждений только с 2 тестами - PullRequest
0 голосов
/ 09 января 2020

Мой тест работает нормально, но когда я читаю эту статью , она упоминает

Один метод подтверждения на метод теста

, и я думаю, мой тест делает слишком много утверждений, вот мой тестовый код:

<?php

use Laravel\Lumen\Testing\DatabaseMigrations;
use Laravel\Lumen\Testing\DatabaseTransactions;

class GuestTest extends TestCase
{
    use DatabaseTransactions;

    /** @test */
    public function guest_can_register()
    {
        $response = $this->json('POST', '/register', [
            "name" => "Khrisna Gunanasurya",
            "email" => "khrisnagunanasurya@gmail.com",
            "password" => "adminadmin",
            "password_confirmation" => "adminadmin"
        ]);

        $response
                ->seeStatusCode(HttpStatus::$CREATED)
                ->seeJsonStructure([
                    "data" => [
                        "type",
                        "id",
                        "attributes" => [
                            'name',
                            'email'
                        ]
                    ]
                ]);
    }

    /** @test */
    public function registered_guest_can_login()
    {
        $this->post('/register', [
            "name" => "Khrisna Gunanasurya",
            "email" => "khrisnagunanasurya@gmail.com",
            "password" => "adminadmin",
            "password_confirmation" => "adminadmin"
        ]);

        $response = $this->json('POST', '/login', [
            'email' => 'khrisnagunanasurya@gmail.com',
            'password' => 'adminadmin'
        ]);

        $response
                ->seeStatusCode(HttpStatus::$OK)
                ->seeJsonStructure([
                    'data' => [
                        'type',
                        'attributes' => [
                            'token',
                            'token_type',
                            'expires_in'
                        ]
                    ]
                ]);
    }
}

Итак, что я хочу спросить, является ли мое тестирование слишком большим количеством утверждений для этого простого теста? как я понимаю, что seeJsonStructure() вызывает много утверждений, зависит от вложенных структур массива, и если мой тестовый модуль делает слишком много утверждений, это создаст проблему в будущем, когда будет много тестовых файлов?

РЕДАКТИРОВАТЬ

enter image description here

1 Ответ

0 голосов
/ 13 апреля 2020

Если вы посмотрите на содержимое assertJsonStructure, вы увидите, как работает эта функция. Она в основном перебирает все ключи и утверждает против ответа. так что в этом случае

public function assertJsonStructure(array $structure = null, $responseData = null){
    foreach ($structure as $key => $value) {
        if (is_array($value)) {
            PHPUnit::assertArrayHasKey($key, $responseData);
            $this->assertJsonStructure($structure[$key], $responseData[$key]);
        } else {
            PHPUnit::assertArrayHasKey($value, $responseData);
        }
    }
}

Итак, у вас есть 6 утверждений, сгенерированных assertJsonStructure, и еще одно с помощью seeStatusCode. всего будет 7 утверждений, у вас есть два теста, сумма которых равна 14.

...