php - 在功能测试中使用 PHP 的 class_alias 时重新声明类的问题

标签 php symfony1 functional-testing

我正在使用 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 的测试人员没有以相同的方式清除吞吐量。 有没有办法“取消别名”或以其他方式允许这种重新声明?

最佳答案

作为替代解决方案,您可以将要实例化的类的名称分配给变量并新建:

public function executeEdit(sfWebRequest $request) {
  $formType;
  switch($request->getParameter('page')) {
    case 'page-1':
      $formType = 'MyFormPage1Form';
    break;
    ...
  }
  $this->form = new $formType();
}

这不使用 class_alias 但将实例化保持在一个位置。

关于php - 在功能测试中使用 PHP 的 class_alias 时重新声明类的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3395718/

相关文章:

php - 如何获取一列中所有值的mysql总和和减去

php - 从 PHP 调用 C/C++ 库函数 - 在共享库中使用多个类

c# - Specflow 覆盖原始异常堆栈跟踪

ios - 在用于移动网络的 iOS 设备上与 Appium 1.4.13 一起使用时,实习生测试框架挂起/不执行任何操作

php - 在 Laravel 中通过路由将变量传递到 Controller 时出现错误

php - summernote 在从 Mysql DB 检索后显示 html 代码

在 Symfony Admin 中使用多个连接到 Excel 的 Mysql 查询

linux - 当多个用户 rsync 到同一个远程位置时,设置 linux 用户和组的正确方法是什么?

php - 使用 UrlGenerator 生成外部路由的 URL

javascript - 如何检查 Jasmine 中是否为 "should has text"?