2015-12-08 7 views
7

Я использую Liip\FunctionalTestBundle для модульного тестирования, он работает очень хорошо.Как использовать Behat с Liip FunctionalTestBundle в Symfony2?

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? 
} 

ответ

3

Как это тест PHPUnit случае, вы не можете использовать его непосредственно в Behat. Вам нужно будет воспроизвести поведение в контексте Behat.

Посмотрите на SymfonyDoctrineContext от Behat/CommonContexts. Это должно быть хорошее место для начала. Контекст написан для Behat 2, поэтому вам нужно настроить его для Behat 3.

Я использую Liip \ FunctionalTestBundle для модульного тестирования, он работает очень хорошо.

Если вы используете FunctionalTestBundle, то вы не пишете модульные тесты. Единичные тесты изолированы. Функциональные тесты - это тип теста интеграции (не изолированный). Если вы еще не заметили, такой тип тестирования является хрупким и медленным. Я рекомендую вам научиться фокусировать больше усилий на истинном модульном тестировании.

0

решение задачи

// 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/" 
....