簡體   English   中英

如何在Symfony2中使用Beip與Liip \\ FunctionalTestBundle?

[英]How to Use Behat with Liip\FunctionalTestBundle in 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?
}

由於這是一個PHPUnit測試用例,因此無法直接在Behat中使用它。 您需要在Behat上下文中復制行為。

看看Behat / CommonContexts的SymfonyDoctrineContext。 它應該是一個很好的起點。 上下文是為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/"
....

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM