Как я могу утверждать экземпляр ResourceCollection в Laravel? - PullRequest
1 голос
/ 09 апреля 2020

Я работаю с функциональным тестом, и он правильно возвращает данные; все возвращается правильно; и я нахожусь на последней части моего теста.

Я изо всех сил пытаюсь утверждать, что я возвращаю 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 (... ) является экземпляром класса "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());
}

1 Ответ

1 голос
/ 10 апреля 2020

Как я уже сказал в комментарии выше, ваш контент будет экземпляром Collection`.

Так что вы можете сделать это так:

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

Так что вы можете попробовать отладить , чтобы сделать его более понятным, как это: Do dd($http); вы должны получить экземпляр Illuminate\Foundation\Testing\TestResponse не то же самое, когда вы делаете $http->dump(); не так ли?

Так что вам нужно утверждать экземпляр только контента, а не Весь ответ.

Надеюсь, я хотя бы немного помог.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...