【发布时间】:2020-07-22 07:11:38
【问题描述】:
我正在进行一项功能测试,它正在正确返回数据;一切都恢复正常;我的测试即将结束。
我很难断言我正在取回 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());
}
【问题讨论】:
-
你试过
$this->assertInstanceOf(ResourceCollection::class, $response->getOriginalContent());吗? -
谢谢!!我没有 - 但是你的建议引发了另一个最终奏效的想法。这很好,但不确定我是否完全理解为什么......我更新了我的问题,希望你能解释一下,这样我就可以理解我做了什么?
-
不客气。这是因为内容是您需要测试的。这行得通吗?我需要输入它作为答案吗? :)
标签: laravel laravel-7 laravel-testing