2015-12-08 13 views
7

Ich verwende Liip\FunctionalTestBundle für Unit-Tests, es funktioniert sehr gut.Wie funktioniert Behath mit Liip FunctionalTestBundle in Symfony2?

AppCategoryControllerTest.php:

class AppCategoryControllerTest extends BoEditoAuthWebTestCase 
{ 
    public function setUp() 
    { 
     parent::setUp(); 

     // It returns an array of class paths 
     $this->loadFixtures($this->getAllDataFixtures()); 
    } 
    //... 
} 

Nun würde Ich mag meine Prüfvorrichtungen mit Behat verwenden.

Wie ist das möglich?

FeatureContext.php:

/** 
* @BeforeScenario @createSchema 
* 
* load my fixtures with Liip\FunctionalTestBundle\Test\WebTestCase 
*/ 
public function createDatabase() 
{ 
    // What can I do here? 
} 

Antwort

3

Da dies ein PHPUnit Testfall, können Sie es nicht direkt in Behat verwenden. Sie müssen das Verhalten in einem Behat-Kontext replizieren.

Werfen Sie einen Blick auf die SymfonyDoctrineContext von Behat/CommonContexts. Es sollte ein guter Anfang sein. Der Kontext ist für Behat 2 geschrieben, also müssen Sie es für Behat 3 optimieren.

Ich benutze Liip \ FunctionalTestBundle für Unit-Tests, es funktioniert sehr gut.

Wenn Sie den FunctionalTestBundle verwenden, dann schreiben Sie keine Komponententests. Unit Tests sind isoliert. Funktionstests sind eine Art von Integrationstest (nicht isoliert). Wenn Sie es noch nicht bemerkt haben, ist diese Art von Tests spröde und langsam. Ich empfehle Ihnen zu lernen, wie Sie sich mehr auf echte Komponententests konzentrieren können.

0

Lösung für das Problem

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