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_modules
和 vendor
文件夹,以防万一我有损坏的 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');
}
我有一个正在开发的 Laravel 8 应用程序,我需要在其中使用 GET 参数(例如 test?num=1
),但不幸的是,我似乎无法弄清楚如何运行 单元测试针对此。
我遵循了我可以在网上找到的指导(包括
为了尝试找出问题所在,我创建了一个非常简单的版本并且我得到了相同的行为。如果我直接转到 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_modules
和 vendor
文件夹,以防万一我有损坏的 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');
}