【问题标题】:Yii functional testing is not working with phpunitYii 功能测试不适用于 phpunit
【发布时间】:2014-06-09 16:11:20
【问题描述】:

Phpunit 在基本项目中工作正常,但是当我尝试在 yii 功能测试中使用时,我收到此错误: PHP 致命错误:在第 95 行的 ~/phpunit/vendor/phpunit/phpunit-selenium/PHPUnit/Extensions/SeleniumBrowserSuite.php 中调用未定义的方法 PHPUnit_Framework_Warning::setupSpecificBrowser()

我使用 composer 安装了 phpunit。版本:Sebastian Bergmann 的 PHPUnit 4.0.17。 硒版本:2.41.0

我像这样运行 selenium:java -jar selenium-server-standalone-2.41.0.jar

我像这样运行测试类:~/phpunit/vendor/bin/phpunit functional/SiteTest.php

在基本项目代码中:

class WebTest extends PHPUnit_Extensions_Selenium2TestCase
{
    protected function setUp()
    {
        $this->setBrowser('firefox');
        $this->setBrowserUrl('http://www.example.com/');
    }

    public function testTitle()
    {
        $this->url('http://www.example.com/');
        $this->assertEquals('Title string', $this->title());
    }

}

Yii 代码:

class WebTestCase extends CWebTestCase
{
    protected function setUp()
    {
        parent::setUp();
        $this->setBrowserUrl(Yii::app()->params['url']['base']);
    }
}

还有 CWebTestCase 类扩展 PHPUnit_Extensions_SeleniumTestCase 类,而不是 PHPUnit_Extensions_Selenium2TestCase。

【问题讨论】:

    标签: php selenium yii phpunit


    【解决方案1】:

    这可能取决于 PHPUnit 的版本。我知道 Yii 1.1.x 对最新版本的 PHPUnit 有问题,你必须安装一个旧版本。

    您可以通过两种方式做到这一点:

    PEAR(已弃用):

    sudo pear config-set auto_discover 1
    sudo pear channel-discover pear.phpunit.de
    sudo pear install phpunit/PHPUnit-3.7.1
    sudo pear install phpunit/DbUnit
    sudo pear install phpunit/PHPUnit_Selenium
    sudo pear install phpunit/PHPUnit_Story
    sudo pear install phpunit/PHP_Invoker
    

    作曲家(更好):

    创建一个composer.json 文件,将其放入protected 中,内容如下:

    {                                                                                                                                        
      "require" : {
          "phpunit/phpunit": "3.7.x-dev"
          "phpunit/dbunit": "1.3.*@dev",
          "phpunit/phpunit-selenium": "dev-master",
          "phpunit/phpunit-story": "dev-master",
          "phpunit/php-invoker": "dev-master"
      }
    }
    

    然后运行composer install。

    如果你选择作曲家,请记住你必须在你的类中添加 require_once('../vendor/autoload.php'); 并且 PHPUnit 二进制文件将在 protecte/vendor/bin 中

    【讨论】:

    • 我没有在我的类中添加“require_once”,而是将根目录的 index.php 的最后几行替换为:require_once($yii); $loader = require(__DIR__。' /vendor/autoload.php'); Yii::$classMap = $loader->getClassMap(); Yii::createWebApplication($config)->run();
    【解决方案2】:

    由于不同的原因,我得到了同样的错误。我的测试文件包含一个名称以“test”开头的私有方法。我将方法名称更改为其他名称(因为它并不是要进行 phpunit/selenium 测试)并且效果很好。当我将其设置为公开时,它也运行良好。

    看起来这不是原始海报的问题,但我想我会把它放在这里以防其他人遇到我同样的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-10
      • 2013-07-08
      • 1970-01-01
      • 1970-01-01
      • 2013-03-05
      • 2021-03-09
      • 2013-08-31
      相关资源
      最近更新 更多