[英]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.