簡體   English   中英

如何在 Laravel 中斷言 ResourceCollection 的實例?

[英]How can I assert an instance of a ResourceCollection in Laravel?

我正在進行功能測試,它正在正確返回數據; 一切都恢復正常; 我正處於考試的最后一部分。

我正在努力斷言我正在取回 ResourceCollection:

$this->assertInstanceOf(ResourceCollection::class, $response);

這是我的測試部分:

MyFeature.php

...

$http->assertStatus(200)
        ->assertJsonStructure([
            'data' => [
                '*' => [
                    'type', 'id', 'attributes' => [
                        'foo', 'bar', 'baz',
                    ],
                ],
            ],
            'links' => [
                'first', 'last', 'prev', 'next',
            ],
            'meta' => [
                'current_page', 'from', 'last_page', 'path', 'per_page', 'to', 'total',
            ],
        ]);

    // Everything is great up to this point...
    $this->assertInstanceOf(ResourceCollection::class, $response);

我回來的錯誤是:

無法斷言 stdClass Object (...) 是 class "Illuminate\Http\Resources\Json\ResourceCollection" 的實例。

我不確定在這種情況下我應該斷言什么。 我正在取回資源集合,我應該使用什么來代替? 感謝您的任何建議!

編輯

謝謝@mare96。 您的建議使我采用了另一種似乎可行的方法。 很好,但我不太確定我真的明白為什么......

這是我的完整測試(包括我的最終斷言):

public function mytest() {
    $user = factory(User::class)->create();

    $foo = factory(Foo::class)->create();

    $http = $this->actingAs($user, 'api')
        ->postJson('api/v1/foo', $foo);

    $http->assertStatus(200)
        ->assertJsonStructure([
            'data' => [
                '*' => [
                    'type', 'id', 'attributes' => [
                        'foo', 'bar', 'baz'
                    ],
                ],
            ],
            'links' => [
                'first', 'last', 'prev', 'next',
            ],
            'meta' => [
                'current_page', 'from', 'last_page', 'path', 'per_page', 'to', 'total',
            ],
        ]);

    $this->assertInstanceOf(Collection::class, $http->getOriginalContent());
}

正如我在上面的評論中所說,您的內容將是 Collection 的實例。

你可以這樣做:

$this->assertInstanceOf(Collection::class, $http->getOriginalContent());

因此,您可以嘗試調試,使其更清晰,如下所示:Do dd($http); 當您執行$http->dump();時,您應該得到一個不一樣的Illuminate\Foundation\Testing\TestResponse實例; 正確的?

因此,您需要斷言僅包含內容的實例,而不是整個響應。

我希望至少我能幫上一點忙。

暫無
暫無

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

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