Php Slim framework unittest mock Router
Php Slim framework unittest mock Router
我在我的应用程序中为 Slim 请求创建了一个包装器,以便能够在请求上创建一些自定义方法 object。
class Request extends SlimRequest
{
/**
* Get authorization token.
*
* @return null|string
*/
public function getAuthToken(): ?string
{
return $this->getHeaderLine('FOOBAR-TOKEN');
}
/**
* Retrieves a route parameter.
*
* @param string $name
* @return string|null
*/
public function getRouteParam(string $name): ?string
{
return $this->getRoute()->getArgument($name);
}
/**
* Retrieves the route instance.
*
* @return Route
*/
public function getRoute(): Route
{
return $this->getAttribute('route');
}
}
我在尝试为此 class 创建单元测试时遇到了问题。我测试请求的方式是在环境模拟中使用 Slims 构建。我在请求中添加了一个 header 的第一个函数,如下所示,但我无法弄清楚如何将路由 object 添加到请求
$request = Request::createFromEnvironment(Environment::mock());
$request = $request->withHeader('FOOBAR-TOKEN', 'superSafeExampleToken');
我尝试使用请求选项创建请求,但是 $this->getAttribute('route'); returns 空
$requestOptions = [
'REQUEST_METHOD' => 'POST,
'REQUEST_URI' => '/foo/bar',
'QUERY_STRING' => http_build_query($requestParameters),
];
$environment = Environment::mock($requestOptions);
好的,解决方案如下
public function testGetRouteParam()
{
$route = $route = new Route('GET', '/foo/{bar}', []);
$route->setArguments(['bar' => 1]);
$request = Request::createFromEnvironment(Environment::mock());
$request = $request->withAttribute('route', $route);
$this->assertEquals(1, $request->getRouteParam('bar'));
$this->assertNull($request->getRouteParam('baz'));
}
我在我的应用程序中为 Slim 请求创建了一个包装器,以便能够在请求上创建一些自定义方法 object。
class Request extends SlimRequest
{
/**
* Get authorization token.
*
* @return null|string
*/
public function getAuthToken(): ?string
{
return $this->getHeaderLine('FOOBAR-TOKEN');
}
/**
* Retrieves a route parameter.
*
* @param string $name
* @return string|null
*/
public function getRouteParam(string $name): ?string
{
return $this->getRoute()->getArgument($name);
}
/**
* Retrieves the route instance.
*
* @return Route
*/
public function getRoute(): Route
{
return $this->getAttribute('route');
}
}
我在尝试为此 class 创建单元测试时遇到了问题。我测试请求的方式是在环境模拟中使用 Slims 构建。我在请求中添加了一个 header 的第一个函数,如下所示,但我无法弄清楚如何将路由 object 添加到请求
$request = Request::createFromEnvironment(Environment::mock());
$request = $request->withHeader('FOOBAR-TOKEN', 'superSafeExampleToken');
我尝试使用请求选项创建请求,但是 $this->getAttribute('route'); returns 空
$requestOptions = [
'REQUEST_METHOD' => 'POST,
'REQUEST_URI' => '/foo/bar',
'QUERY_STRING' => http_build_query($requestParameters),
];
$environment = Environment::mock($requestOptions);
好的,解决方案如下
public function testGetRouteParam()
{
$route = $route = new Route('GET', '/foo/{bar}', []);
$route->setArguments(['bar' => 1]);
$request = Request::createFromEnvironment(Environment::mock());
$request = $request->withAttribute('route', $route);
$this->assertEquals(1, $request->getRouteParam('bar'));
$this->assertNull($request->getRouteParam('baz'));
}