2015-12-08 9 views
7

Sto usando Liip\FunctionalTestBundle per il test delle unità, funziona molto bene.Come utilizzare Behat con 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()); 
    } 
    //... 
} 

Ora vorrei usare le mie attrezzature di prova con Behat.

Com'è possibile?

FeatureContext.php:

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

risposta

3

Poiché si tratta di un banco di prova PHPUnit, non è possibile utilizzare direttamente in Behat. Dovrai replicare il comportamento in un contesto Behat.

Dai un'occhiata allo SymfonyDoctrineContext da Behat/CommonContexts. Dovrebbe essere un buon punto di partenza. Il contesto è scritto per Behat 2, quindi è necessario modificarlo per Behat 3.

Sto usando Liip \ FunctionalTestBundle per il test dell'unità, funziona molto bene.

se si sta utilizzando il FunctionalTestBundle, allora non stai scrittura di unit test. I test unitari sono isolati. I test funzionali sono tipi di test di integrazione (non isolati). Se non l'hai ancora notato, questo tipo di test è fragile e lento. Vi consiglio di imparare come concentrare maggiormente i vostri sforzi sul test delle unità reali.

0

soluzione per il problema

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