我已开始对我当前的项目进行单元测试。
虽然所有单元测试目前都已通过,但由于方便,我对jsonResponse
方法进行了更改以发送json标头。这有助于我将json响应视为Chrome控制台中的树。
现在由于
,单元测试失败了无法修改标题信息 - 已经发送的标题 (输出从[fullPath] /phpunit/src/Util/Printer.php:134开始)
深入挖掘,我发现可以通过在docBlocks中添加@runInSeparateProcess
来解决此问题。
但这只会导致:
PHP致命错误:类' PHPUnit_Util_Configuration'没有找到 - 在线365
PHP堆栈跟踪:
PHP 1. {main}() - :0
这是我的一个json方法(在几个通过AJAX请求调用的方法的末尾调用):
/**
* Helper function to print a json encoded success message back to the frontend.
*
* @param array $returnData
*
* @return bool
*
* @runInSeparateProcess
*/
public function returnJsonSuccess($returnData = [])
{
header('Content-Type: application/json');
echo json_encode(
[
"success" => true,
"data" => $returnData,
]
);
return true;
}
因此,切入追逐,我怎样才能使这项工作正常进行?
我的一个选择是检测方法是否从单元测试调用,并且只有在正常调用时才有条件地发送标头。我认为最简单的方法是在引导程序文件中定义环境变量或常量,并在我的BaseController
中检查它。
是否有更简洁的方法让我的单元测试再次工作,同时保持json标头的发送?
答案 0 :(得分:0)
从我的观点来看,你有两种可能的解决方案:
setUp
方法我希望这有助于
答案 1 :(得分:0)
我自己解决了:
/**
* Helper function to print a json encoded success message back to extJs.
*
* @param array $returnData
*
* @return bool
*/
public function returnJsonSuccess($returnData = [])
{
$request = $this->getRequest();
if ($request && $request->isXmlHttpRequest()) {
header('Content-Type: application/json');
}
echo json_encode(
[
"success" => true,
"data" => $returnData,
]
);
return true;
}
使用Request
类的ZendFramework可以检测调用是否来自AJAX请求。这样,如果有AJAX请求,我只发送标题。