2015-12-08 17 views
7

Tôi đang sử dụng Liip\FunctionalTestBundle để kiểm tra Đơn vị, nó hoạt động rất tốt.Làm thế nào để sử dụng Behat với Liip FunctionalTestBundle trong Symfony2?

AppCategoryControllerTest.php:

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

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

Bây giờ tôi muốn sử dụng đồ đạc thử nghiệm của tôi với Behat.

Làm cách nào có thể?

FeatureContext.php:

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

Trả lời

3

Vì đây là một trường hợp thử nghiệm PHPUnit, bạn không thể sử dụng nó trực tiếp trong Behat. Bạn sẽ cần sao chép hành vi trong ngữ cảnh Behat.

Hãy xem SymfonyDoctrineContext từ Behat/CommonContexts. Nó sẽ là một nơi tốt để bắt đầu. Ngữ cảnh được viết cho Behat 2, do đó bạn sẽ cần phải chỉnh sửa nó cho Behat 3.

Tôi đang sử dụng Liip \ FunctionalTestBundle để kiểm tra đơn vị, nó hoạt động rất tốt.

Nếu bạn đang sử dụng FunctionalTestBundle, thì bạn không viết các bài kiểm tra đơn vị. Các bài kiểm tra đơn vị được phân lập. Kiểm tra chức năng là loại thử nghiệm tích hợp (không bị cô lập). Nếu bạn chưa nhận thấy, loại thử nghiệm này là giòn và chậm. Tôi khuyên bạn nên tìm hiểu cách tập trung nhiều nỗ lực của bạn vào thử nghiệm đơn vị thực sự.

0

giải pháp cho vấn đề

// 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/" 
.... 
Các vấn đề liên quan