为什么 PHPUnit 不能正确断言使用无效方法的请求?

Why PHPUnit does not assert correctly a request with an unvalid method?

我想做的是使用无效方法断言请求。

我测试的是一个来宾试图以 GET(无效)注销。

这是代码:

/**
 * Enables router filters.
 *
 * @return void
 */ 
public function enableRouterFilters()
{
    $this->app['router']->enableFilters();
}

[...]

/**
 * Tests users/logout route as a Guest with GET.
 *
 * @return void
 */
public function testRouteToUsersLogoutAsGuestWithGetMethod()
{
    $this->enableRouterFilters();

    $response = $this->call('GET', '/users/logout');
    $this->assertResponseStatus(405);
}

[...]

PHPUnit 没有断言 true,而是抱怨它:

[...]

There was 1 error:

1) RoutesTest::testRouteToUsersLogoutAsGuestWithGetMethod
Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException:

[...]

FAILURES!
Tests: 7, Assertions: 11, Errors: 1.

如果断言确实为真,为什么会给我一个错误?

抛出的异常是 "MethodNotAllowedHttpException"。这意味着您没有设置路由来捕获对此特定 URL 和请求类型 (GET) 的请求。

您实际上要做的是告诉 PHPUnit 您希望抛出某个异常,在这种情况下:Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException

尝试用以下方法注释您的方法:

/**
  * @expectsException Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException
**/

完整文档:https://phpunit.de/manual/current/en/writing-tests-for-phpunit.html#writing-tests-for-phpunit.exceptions.examples.ExceptionTest.php