【发布时间】:2016-09-21 20:27:18
【问题描述】:
我创建了一个中间件,它应该只将用户重定向到另一个网站(在请求 URL 中由参数重定向给出)
class Middleware
{
public function __invoke($request, $response, $next)
{
// Call next middleware or app
$response = $next($request, $response);
$redirectUrl = //get redirect url
return $response->withStatus(200)->withHeader('Location', $redirectUrl);
}
}
我已经对此进行了测试,并且重定向工作正常。所以我来到那个点来编写单元测试。我失败了……这是我的尝试:
class MiddlewareTest extends \PHPUnit_Framework_TestCase
{
public $request = array(...); //inserted needed properties
public function testInvoke(String $url) {
$next = function () : bool
{
return true;
}; //empty function
$request['request']['scriptUri'] = "/parameterStuff&redirect=" . $url; //overwrite the Uri with provided Url
$redirect = new Middleware($request, array(), $next);
//just to test if result of response still empty
$iCount = count((array)$redirect);
$this->assertEquals(0, $iCount);
}
public function invokeProvider() : array
{
return array(
array('http://example.com')
);
}
}
这个测试是成功的,但它不应该......这个函数的返回应该是一个有效的响应。我在浏览器中对此进行了测试并回显了返回。它在那里有一个值,它是带有预期标题的正确响应。我在单元测试中收到的返回值是一个空对象。
我将 Slim Documentation 标记为响应对象,它是:
此方法返回具有新标头值的 Response 对象的副本。 所以我绝对应该从中得到一些东西。我还尝试返回响应的副本:
$copyresponse = response->withStatus(200)->withHeader('Location', $redirectUrl);
return $copyresponse;
这也不行。任何想法可能导致我的问题以及如何解决它?
(我想测试在响应中是否正确设置了重定向 url,以确保重定向可以正常工作)
【问题讨论】:
标签: unit-testing redirect phpunit response slim