gpt4 book ai didi

Laravel:是否可以在不实际通过 URI 的情况下直接测试函数的 json 响应输出?

转载 作者:行者123 更新时间:2023-11-28 21:21:41 24 4
gpt4 key购买 nike

来自 the docs ,我可以使用以下方法测试从我的应用程序返回的一些 json:

$response = $this->json('POST', '/user', ['name' => 'Sally']);

$response
->assertStatus(201)
->assertJson([
'created' => true,
]);

但是,是否有可能绕过使用 $this->json(*method*, *uri*, *data*); 实际调用 URI,而是测试 a 的直接输出返回json的 Controller 函数?例如,我想做这样的事情:

// My controller:

function getPageData(){
$data = array('array', 'of', 'data');
return response()->json($data);
}

// My Test Class:

$controller = new Primary();
$response = $controller->getPageData();

$response->assertJson([
'array', 'of', 'data'
]);

这可能吗?

最佳答案

您可以对一些基本方法执行此操作,但它可能会导致副作用:

app(SomeController::class)->someControllerMethod();

基本上,app() 将从构造函数中解析依赖关系,但不会解析方法依赖关系。因此,如果您输入类似 method(Request $request) 的提示,它将引发错误。

我很确定处理 request() 会导致意想不到的影响,因为没有真正的请求在进行。

编辑:

然后您可以创建一个 TestResponse 对象,以获取所有断言:

$res = app(SomeController::class)->someControllerMethod();
$testRes = new Illuminate\Foundation\Testing\TestResponse($res);
$testRes->assertJson(...); // Will be available

关于Laravel:是否可以在不实际通过 URI 的情况下直接测试函数的 json 响应输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50079486/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com