[英]How to Use Behat with Liip\FunctionalTestBundle in Symfony2?
我正在使用Liip\\FunctionalTestBundle
進行單元測試,效果非常好。
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 Liip\FunctionalTestBundle\Test\WebTestCase
*/
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 Behat\Behat\Context\Context;
class ApiContext extends \Liip\FunctionalTestBundle\Test\WebTestCase 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/"
....
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.