gpt4 book ai didi

php - Laravel phpunit 测试获取带参数

转载 作者:可可西里 更新时间:2023-10-31 23:09:07 26 4
gpt4 key购买 nike

我正在为我的 Controller 编写一些测试,但我的一个测试不起作用。它应该进行搜索并将结果返回到页面。但它实际上是重定向到主页。这是我的代码:

use DatabaseMigrations;
protected $user;
public function setUp()
{
parent::setUp();

$this->seed();

$this->user = factory(User::class)->create(['role_id' => 3]);
}

/** @test */
public function test_manage_search_user()
{
$response = $this->followingRedirects()->actingAs($this->user)->get('/manage/users/search', [
'choices' => 'username',
'search' => $this->user->username,
]);

$response->assertViewIs('manage.users');
$response->assertSuccessful();
$response->assertSee($this->user->email);
}

要使它正常工作,您应该获取的 URL 如下所示:

http://localhost/manage/users/search?choices=username&search=Test

我又检查了一下,好像在get请求的参数中没有给出。我该如何解决这个问题?

最佳答案

我在尝试测试 GET 请求时遇到了同样的问题,实际上你不能用 $this->get('uri', [header]) 传递参数> 但您可以使用 $this->call,如果您 checkin MakesHttpRequests.php,您可以看到 this->get()实际上是使用调用方法。

通过向 get 方法添加一个数组,您正在更改请求 header ,这就是您没有获取参数的原因。

public function get($uri, array $headers = [])
{
$server = $this->transformHeadersToServerVars($headers);

return $this->call('GET', $uri, [], [], [], $server);
}

public function call($method, $uri, $parameters = [], $cookies = [], $files = [], $server = [], $content = null)
{
$kernel = $this->app->make(HttpKernel::class);

$files = array_merge($files, $this->extractFilesFromDataArray($parameters));

$symfonyRequest = SymfonyRequest::create(
$this->prepareUrlForRequest($uri), $method, $parameters,
$cookies, $files, array_replace($this->serverVariables, $server), $content
);

$response = $kernel->handle(
$request = Request::createFromBase($symfonyRequest)
);

if ($this->followRedirects) {
$response = $this->followRedirects($response);
}

$kernel->terminate($request, $response);

return $this->createTestResponse($response);
}

所以如果你想测试一个GET请求你必须这样做:

$request = $this->call('GET', '/myController', ["test"=>"test"]);

在您的 Controller 中,您应该能够像这样获取这些参数:

public function myController(Request $request)
{
$requestContent = $request->all();
$parameter = $requestContent['test'];
}

关于php - Laravel phpunit 测试获取带参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47474554/

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