lumen - 为啥 PHPUnit 注册测试返回 405?
Posted
技术标签:
【中文标题】lumen - 为啥 PHPUnit 注册测试返回 405?【英文标题】:lumen - Why does PHPUnit register test returns 405?lumen - 为什么 PHPUnit 注册测试返回 405? 【发布时间】:2021-12-30 21:20:02 【问题描述】:我想为 lumen 应用程序进行 phpunit 测试,例如:
public function testRegisterUser()
$newUserData = [
'name' => 'test_user',
'email' => 'test_user@mail.com',
'password' => Hash::make('111111'),
'status' => 'A',
'has_debts' => false
];
$response = $this->get('/api/v1/register', $newUserData); // http://localhost:8000/api/v1/register
$this->assertResponseOk();
但运行测试时出现 405 错误:
1) PagesTest::testRegisterUser
Expected response status code [200] but received 405.
Failed asserting that 200 is identical to 405.
/ProjectPath/vendor/illuminate/testing/TestResponse.php:177
/ProjectPath/vendor/illuminate/testing/TestResponse.php:99
/ProjectPath/vendor/laravel/lumen-framework/src/Testing/Concerns/MakesHttpRequests.php:415
/ProjectPath/tests/PagesTest.php:27
为什么我得到 405 Method Not Allowed ?我邮差我检查我的方法:https://prnt.sc/207bu03
postman 中的方法 /api/v1/register 没有任何令牌保护。 如何让我的测试正常运行?
更新块: 我得到了错误:
Error: Call to undefined method PagesTest::getJson()
如果我修改:
$response = $this->getJson('/api/v1/register', $newUserData);
这里提到了getJson方法:https://laravel.com/docs/8.x/http-tests 但是在此页面上,我在测试文件头中看到: 命名空间Tests\Feature;
但不在我生成的流明测试文件中。
在我的 routes/web.php 我有:
$router->group(['prefix'=>'api/v1'], function() use($router)
$router->post('/register','AuthController@register');
$router->post('/login', 'AuthController@login');
$router->group(['middleware' => 'auth'], function () use ($router)
$router->get('/profile', 'UserProfileController@index');
怎么了?
谢谢!
【问题讨论】:
【参考方案1】:因为您可能必须使用$this->getJson
而不是$this->get
。
它不是http://localhost:8000
,因为您正在测试,您并没有真正访问该 URL。它正在模拟那个。
还请分享您的api.php
或路由文件和控制器(还有处理该 URL 的中间件)。
查看Lumen's documentation可以看到没有getJson
,我的错。您必须改用$this->json('GET'
。
【讨论】:
请看更新块 看看我更新的答案以上是关于lumen - 为啥 PHPUnit 注册测试返回 405?的主要内容,如果未能解决你的问题,请参考以下文章
phpunit 测试返回 302 验证错误,为啥不返回 422
Lumen PHPUNIT 不使用 .env.testing