在功能测试中使用PHP的class_alias时重新声明类的问题
作者:互联网
我正在使用PHP 5.3的class_alias来帮助处理Symfony 1.4(Doctrine)表单.我使用一个动作来处理多个表单页面,但使用switch语句选择要使用的表单类.
public function executeEdit(sfWebRequest $request) {
switch($request->getParameter('page')) {
case 'page-1':
class_alias('MyFormPage1Form', 'FormAlias');
break;
...
}
$this->form = new FormAlias($obj);
}
这在浏览网站时效果很好,但是由于页面多次加载而无法通过我的功能测试,如下所示:
$browser->info('1 - Edit Form Page 1')->
get('/myforms/edit')->
with('response')->begin()->
isStatusCode(200)->
end()->
get('/myforms/edit')->
with('response')->begin()->
isStatusCode(200)->
end();
我收到第二个请求的500响应,出现以下错误:
last request threw an uncaught exception RuntimeException: PHP sent a warning error at /…/apps/frontend/modules/…/actions/actions.class.php line 225 (Cannot redeclare class FormAlias)
这使得测试表单提交(通常回发给自己)非常困难.
大概是因为Symfony的测试人员没有以相同的方式清除吞吐量.
有没有办法“ unalias”或以其他方式允许这种重新声明?
解决方法:
作为一种替代解决方案,您可以分配要实例化的类的名称给一个变量,并为其新建变量:
public function executeEdit(sfWebRequest $request) {
$formType;
switch($request->getParameter('page')) {
case 'page-1':
$formType = 'MyFormPage1Form';
break;
...
}
$this->form = new $formType();
}
这不使用class_alias,而是将实例化放在一个位置.
标签:symfony1,functional-testing,php 来源: https://codeday.me/bug/20191209/2097456.html