Laravel测试用例,用于检查JSON输出中的一个元素



我的Laravel应用程序上有以下控制器:

class ProjectController extends Controller {
...
public function index() {
$projects = Project::where('is_completed', false)
->orderBy('created_at', 'desc')
->withCount(['tasks' => function ($query) {
$query->where('is_completed', false);
}])->get();
return response()->json($projects);
}
...
}

它由以下路由引用:

Route::get('projects', 'ProjectController@index');

当我转到网址:http://localhost:8000/api/projects时,我得到:

[
{
"id": 2,
"name": "Project 02 Title",
"description": "Project 02 Description",
"is_completed": 0,
"created_at": "2018-10-13 16:23:28",
"updated_at": "2018-10-13 16:23:28",
"tasks_count": 0
},
{
"id": 1,
"name": "Project 01 Title",
"description": "Project 01 Description",
"is_completed": 0,
"created_at": "2018-10-13 16:22:52",
"updated_at": "2018-10-13 16:22:52",
"tasks_count": 0
}
]

另外,我有以下测试文件:

<?php
namespace TestsFeature;
use TestsTestCase;
use IlluminateFoundationTestingWithFaker;
use IlluminateFoundationTestingRefreshDatabase;
class ProjectTest extends TestCase
{
/**
* A basic test example.
*
* @return void
*/
public function testExample()
{
$response = $this->get('/');
// this is not working:
// $response->assertJson([ 0 => [ 'name' => 'Project 02 Title' ] ]);
}
}
?>

我想在testExample()上做的是检查输出数组上第一个元素的name成员(JSON格式(是否具有字符串值:Project 02 Title

关于如何实现这一目标的任何想法?

谢谢!

如果您知道要查找的确切数组元素,则可以测试各个属性;例如:

$json = $reponse->json();
$this->assertSame('Project 02 Title', $json[0]['name']);

或者,如果您想测试 JSON 结构,您可以使用:

$response->assertJsonFragment([
'name' => 'Project 02 Title'
]);

再次检查您的测试,您没有访问正确的端点:

$response = $this->get('/');

这可能看起来更像这样:

$response = $this->get('/api/projects');

您的测试应该可以工作,看起来没问题。

最新更新