【问题标题】:How to Use Behat with Liip\FunctionalTestBundle in Symfony2?如何在 Symfony2 中将 Behat 与 Liip\FunctionalTestBundle 一起使用?
【发布时间】:2015-12-08 14:55:05
【问题描述】:

我正在使用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?
}

【问题讨论】:

    标签: symfony fixtures behat liipfunctionaltestbundle


    【解决方案1】:

    由于这是一个 PHPUnit 测试用例,您不能直接在 Behat 中使用它。您需要在 Behat 上下文中复制该行为。

    查看来自 Behat/CommonContexts 的 SymfonyDoctrineContext。这应该是一个很好的起点。上下文是为 Behat 2 编写的,因此您需要针对 Behat 3 对其进行调整。

    我正在使用 Liip\FunctionalTestBundle 进行单元测试,效果很好。

    如果您使用的是 FunctionalTestBundle,那么您就不是在编写单元测试。单元测试是孤立的。功能测试是集成测试的类型(不是孤立的)。如果你还没有注意到,这种测试是脆弱和缓慢的。我建议您学习如何将更多精力集中在真正的单元测试上。

    【讨论】:

      【解决方案2】:

      问题的解决方案

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多