簡體   English   中英

Behat和Symfony數據夾具

[英]Behat and Symfony data fixtures

我想知道是否可以使用單獨的數據庫進行Behat測試? 有沒有辦法像使用PHPUnit那樣刪除和截斷數據庫並加載數據夾具?

您可以創建一個新環境 (如test,dev和prod)並以您首選的方式對其進行配置。

作為配置behat env的示例,請執行以下操作:

  1. 在名為web_behat.php的Web文件夾中創建一個新文件
  2. 在config文件夾中定義config_behat.yml
  3. 在parameters_behat.yml中自定義您的parameters_behat.yml

然后

  1. 在你的behat測試中使用這個環境你可以加載你的燈具等

我不知道你可以在behat場景中設置你的燈具,但僅作為例子你可以在命令行中做這樣的事情:

php app/console doctrine:fixture:load --env=behat

詳細步驟

  1. 在web文件夾中創建一個名為web_behat.php的新文件(從web_dev.php復制並刪除ip限制)取決於你的sf2版本,但是:

web_behat.php

<?php

use Symfony\Component\ClassLoader\ApcClassLoader;
use Symfony\Component\HttpFoundation\Request;


$loader = require_once __DIR__.'/../app/bootstrap.php.cache';

// Use APC for autoloading to improve performance
// Change 'sf2' by the prefix you want in order to prevent key conflict with another application
/*
$loader = new ApcClassLoader('sf2', $loader);
$loader->register(true);
*/

require_once __DIR__.'/../app/AppKernel.php';

$kernel = new AppKernel('behat', false);
$kernel->loadClassCache();
//$kernel = new AppCache($kernel);
$request = Request::createFromGlobals();
$response = $kernel->handle($request);
$response->send();
$kernel->terminate($request, $response);

app/config文件夾下定義一個config_behat.yml,您可以在其中調用具有所需配置(數據庫,電子郵件等)的自定義參數,如下所示:

config_behat.yml

imports:
    - { resource: config.yml }
    - { resource: parameters_behat.yml }


monolog:
    handlers:
        main:
            type:         fingers_crossed
            action_level: error
            handler:      nested
        nested:
            type:  stream
            path:  %kernel.logs_dir%/%kernel.environment%.log
            level: debug

assetic:
    use_controller: true

framework: 
    test: ~

parameters:
    router.options.matcher.cache_class: ~ # disable router cache
    router.options.matcher_class: Symfony\Component\Routing\Matcher\ApacheUrlMatcher

parameters_behat.yml

parameters:
    database_driver:   pdo_mysql
    database_host:     localhost
    database_port:     ~
    database_name:     test_behat
    database_user:     root
    database_password:

希望這有幫助

在你的behat中設置一個自定義環境,並將容器+實體管理器注入特征上下文(或只是容器並從那里加載它)。 不相關的設置未顯示。

Behat.yml

default:
  suites:
    default:
      contexts:
      - FeatureContext:
          container: '@service_container'
          entityManager: "@doctrine.orm.default_entity_manager"
  extensions:
    Behat\Symfony2Extension:
      kernel:
        env: "test"

FeatureContext

一定要用你的替換夾具路徑(在$loader->loadFromDirectory )。

<?php

use Doctrine\Common\DataFixtures\Executor\ORMExecutor;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\Tools\SchemaTool;
use Symfony\Bridge\Doctrine\DataFixtures\ContainerAwareLoader;
use Symfony\Component\DependencyInjection\ContainerInterface;

/**
 * Defines application features from the specific context.
 */
class FeatureContext extends MinkContext
{
    /**
     * @var ContainerInterface
     */
    private $container;

    /**
     * @var EntityManager
     */
    private $em;

    /**
     * FeatureContext constructor.
     * @param ContainerInterface $container
     * @param EntityManager $entityManager
     */
    public function __construct(ContainerInterface $container, EntityManager $entityManager)
    {
        $this->container = $container;
        $this->em = $entityManager;

        $this->setupDatabase();
        $this->loadFixtures();
    }

    protected function setupDatabase()
    {
        $metaData = $this->em->getMetadataFactory()->getAllMetadata();
        $schemaTool = new SchemaTool($this->em);
        $schemaTool->dropDatabase();
        if (!empty($metaData)) {
            $schemaTool->createSchema($metaData);
        }
    }

    protected function loadFixtures()
    {
        $loader = new ContainerAwareLoader($this->container);
        $loader->loadFromDirectory(__DIR__ . '/../../src/AppBundle/DataFixtures');
        $executor = new ORMExecutor($this->em);
        $executor->execute($loader->getFixtures(), true);
    }
}

暫無
暫無

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

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