如何在Symfony2中使用Behat和Liip \ FunctionalTestBundle?
我使用LiipFunctionalTestBundle
进行单元测试,它工作得很好。
AppCategoryControllerTest.php:
class AppCategoryControllerTest extends BoEditoAuthWebTestCase
{
public function setUp()
{
parent::setUp();
// It returns an array of class paths
$this->loadFixtures($this->getAllDataFixtures());
}
//...
}
现在我想用Behat测试灯具。
这怎么可能?
FeatureContext.php:
/**
* @BeforeScenario @createSchema
*
* load my fixtures with LiipFunctionalTestBundleTestWebTestCase
*/
public function createDatabase()
{
// What can I do here?
}
由于这是一个PHPUnit测试用例,因此不能直接在Behat中使用它。 您需要在Behat上下文中复制行为。
查看Behat / CommonContexts中的SymfonyDoctrineContext。 它应该是一个开始的好地方。 上下文是为Behat 2编写的,因此您需要为Behat 3调整它。
我使用Liip FunctionalTestBundle进行单元测试,它工作得很好。
如果你正在使用FunctionalTestBundle,那么你不会写单元测试。 单元测试是孤立的。 功能测试是一种集成测试(不是孤立的)。 如果你还没有注意到,这种测试是脆弱和缓慢的。 我建议您学习如何将更多精力放在真正的单元测试上。
解决问题的办法
// ApiContext.php
<?php
declare(strict_types=1);
use BehatBehatContextContext;
class ApiContext extends LiipFunctionalTestBundleTestWebTestCase implements Context
{
public function __construct($kernelDir)
{
parent::__construct();
$_SERVER['KERNEL_DIR'] = $kernelDir;
}
/**
* @BeforeScenario
*
*/
public function loadFixturesData(): void
{
$fixturesLocation = '@AppBundle/DataFixtures/ORM/hautelook_alice/';
$this->loadFixtureFiles([
$fixturesLocation . 'fixture1.yml',
$fixturesLocation . 'fixture2.yml',
]);
}
}
// behat.yml
....
suites:
default:
contexts:
- ApiContext:
kernelDir: "app/"
....
链接地址: http://www.djcxy.com/p/31085.html
上一篇: How to Use Behat with Liip\FunctionalTestBundle in Symfony2?