簡體   English   中英

使用 PHPUnit 的 Lumen 測試顯示太多斷言,只有 2 個測試

[英]Lumen testing with PHPUnit showing too much assertions with only 2 tests

我的測試工作正常,但是當我閱讀這篇文章時,它提到

每個測試方法一個斷言

我認為我的測試做出了過多的斷言,這是我的測試代碼:

<?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()正在調用許多斷言取決於嵌套的數組結構,如果我的測試單元做出太多斷言會在將來有很多測試文件時產生問題嗎?

編輯

在此處輸入圖片說明

如果您查看 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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM