Как использовать Behat с Liip\FunctionalTestBundle в 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?
}
2 ответа
Поскольку это тестовый пример PHPUnit, вы не можете использовать его непосредственно в Behat. Вам нужно будет повторить поведение в контексте Behat.
Взгляните на SymfonyDoctrineContext от Behat/CommonContexts. Это должно быть хорошее место для начала. Контекст написан для 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/"
....