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

vendor/bin/phpunit 不适用于 Lumen

Lumen PHPUNIT 不使用 .env.testing

PHPUnit:使用注解返回特定类型真的有必要吗?

为啥在 Laravel 中使用 PHPUnit 的函数“link_to”没有返回值?

无法为测试设置单独的数据库 - Laravel/Lumen