如何在Symfony2中使用Behat和Liip \ FunctionalTestBundle?

我使用LiipFunctionalTestBundle进行单元测试,它工作得很好。

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 LiipFunctionalTestBundleTestWebTestCase
 */
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 BehatBehatContextContext;

  class ApiContext extends LiipFunctionalTestBundleTestWebTestCase 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/"
....
链接地址: http://www.djcxy.com/p/31085.html

上一篇: How to Use Behat with Liip\FunctionalTestBundle in Symfony2?

下一篇: NSOpenPanel crash in sandbox inherited process