Laravel PHPUnit 无法测试 GET 参数

Laravel PHPUnit unable to test GET parameters

我有一个正在开发的 Laravel 8 应用程序,我需要在其中使用 GET 参数(例如 test?num=1),但不幸的是,我似乎无法弄清楚如何运行 单元测试针对此。

我遵循了我可以在网上找到的指导(包括 ,看起来很有希望)但是,none 的方法似乎有效。

为了尝试找出问题所在,我创建了一个非常简单的版本并且我得到了相同的行为。如果我直接转到 URL,它会按预期工作,但单元测试失败。

routes\web.php

Route::get('/test', 'TimeController@test')->name('myTest');

app\Http\Controllers\TimeController.php

public function test()
{
    return $_GET['num'] ?? "Num not provided";
}

test\Unit\Http\Controllers\TimeControllerTest.php

/** @test */
public function num_test_1()
{
    $params = ["num" => "1"];
    $response = $this->get('/test?num=1');
    $response->assertSeeText("1");
}
/** @test */
public function num_test_2()
{
    $params = ["num" => "1"];
    $response = $this->get('/test', $params);
    $response->assertSeeText("1");
}
/** @test */
public function num_test_3()
{
    $params = ["num" => "1"];
    $response = $this->call('GET', '/test', $params);
    $response->assertSeeText("1");
}

以上三个测试均失败并显示消息

Failed asserting that 'Num not provided' contains "1".

我什至竭尽全力删除了 node_modulesvendor 文件夹,以防万一我有损坏的 PHPUnit 包或其他东西。

我遗漏了什么明显的东西吗?这感觉应该是一件很容易做的事情,而且很多人以前都会做过。

它工作正常。

你应该这样改变你的方法:

public function test(Request $request)
{
    return $request->input('num') ?? "Num not provided";
}

或使用query方法:

public function test(Request $request)
{
    return $request->query('num') ?? "Num not provided";
}

如果找到 none 而不是使用 ??:

,您也可以传递所需的默认值
public function test(Request $request)
{
    return $request->input('num', 'Num not provided');
}

public function test(Request $request)
{
    return $request->query('num', 'Num not provided');
}