我已经使用composer安装了所有必需的包:
"behat/behat": "*",
"behat/symfony2-extension": "*",
"behat/mink": "*",
"behat/mink-bundle": "dev-master",
"behat/mink-extension": "*",
"behat/mink-goutte-driver": "*",
"behat/mink-selenium2-driver": "*",
"phpunit/phpunit": "4.1.*",
"phpunit/phpunit-selenium": ">=1.2",
然后我按照MinkBundle关于代码覆盖率的文档(https://github.com/Behat/MinkBundle/blob/master/Resources/doc/coverage.rst)
但是我无法覆盖我的功能测试。
以下是ControllerTest的示例:
namespace Keep\AccountBundle\Tests;
use Behat\MinkBundle\Test\MinkTestCase;
use Symfony\Bundle\FrameworkBundle\Console\Application;
use Symfony\Component\Console\Output\NullOutput;
use Symfony\Component\Console\Input\ArrayInput;
use Doctrine\Bundle\DoctrineBundle\Command\DropDatabaseDoctrineCommand;
use Doctrine\Bundle\DoctrineBundle\Command\CreateDatabaseDoctrineCommand;
use Doctrine\Bundle\DoctrineBundle\Command\Proxy\CreateSchemaDoctrineCommand;
class UserControllerTest extends MinkTestCase
{
protected $base;
protected function setUp()
{
$this->base = $this->getKernel()
->getContainer()
->getParameter('mink.base_url');
//fixtures loading code
}
private function doLogin($username, $password) {
$session = $this->getMink()->getSession();
$session->visit($this->base.'/login');
$page = $session->getPage();
$page->fillField('username', $username);
$page->fillField('password', $password);
$page->pressButton('Login');
$this->assertEquals($this->base.'/', $session->getCurrentUrl());
}
public function testList() {
$this->doLogin('superadmin', 'superadmin');
$session = $this->getMink()->getSession();
$session->visit($this->base.'/account/user');
$this->assertEquals('200', $session->getStatusCode());
$this->assertCount(9, $session->getPage()->findAll('css', '#list-table tbody tr'));
}
}
当我运行命令时:
php phpunit.phar --coverage-html ./mink-report -c app/ src/Bundle/AccountBundle/Tests/Controller/UserControllerTest.php
所有测试都没问题,但Controller的覆盖率为0%。所涉及的只是灯具代码(DataFixtures文件夹和实体设置器。
答案 0 :(得分:0)
我的理由是Mink使用他自己的php环境,因此phpunit无法跟踪代码。
所以,在你的yml配置中(在我的例子中是config_test.yml):
#config/config_test.yml
// ...
mink:
base_url: http://myproject.test
#default_session: goutte
browser_name: firefox
#goutte: ~
#selenium2: ~
我刚评论了default_session
选项,并禁用了goutte
和selenium2
驱动程序,以确保两者均未使用。
现在我得到了我的代码覆盖率,但是!失败会导致错误。
我的测试网址的base_url是 myproject.test / app_test.php
在我的某个测试中,当我尝试通过填写我的身份验证表单登录时,它会将我重定向到 myproject.test / !而不是 myproject.test / app_test.php
解决此问题的唯一方法是创建一个直接指向app_test.php的主机,而不是 myproject.test / 。
现在我的 myproject.test / login (由于我的vhost指向它而使用app_test.php),重定向 myproject.test /