Symfony2 在测试时使用第二个数据库

Symfony2 using second database while testing

我在我的 symfony2 应用程序中使用 behat 进行测试。现在我需要有两个数据库。首先(现在正在工作),用于正常使用,例如用户在现场做某事。第二个数据库(存在并在其上工作),用于测试目的。

我现在得到的是两个工作数据库,然后是。 Behat 使用第二个数据库,但问题是当测试进行时,站点不使用它。

我的config.yml:

doctrine:
    dbal:
        driver:   pdo_mysql
        host:     "%database_host%"
        port:     "%database_port%"
        dbname:   "%database_name%"
        user:     "%database_user%"
        password: "%database_password%"
        charset:  UTF8

我的config_test.yml:

doctrine:
    dbal:
        dbname:   "%database_name%_test"

我的'behat.yml':

default:
suites:
    default:
        paths:
            features: '%paths.base%/features'
            bootstrap:  '%paths.base%/features/bootstrap'
        contexts:
            - FeatureContext: ~
            - EwidencjaContext:
                userManager: '@fos_user.user_manager'
                em: '@doctrine.orm.entity_manager'
                packageManager: '@em.package_manager'
extensions:
    Behat\Symfony2Extension: ~
    Behat\MinkExtension:
        base_url:  http://my_nginx/app_test.php
        goutte: ~
        selenium2:
            browser: "chrome"
            wd_host: http://selenium_chrome:4444/wd/hub
            capabilities: { "browserName": "chrome", "browser": "chrome"}
    Bex\Behat\ScreenshotExtension:
        image_drivers:
            local:
                screenshot_directory: tests/features/images/
                clear_screenshot_directory: true

如何更改数据库以进行时间测试?

这将 SQLite 用于 Behat(测试)环境,但您可以根据需要使用 MySQL。

config_test.yml

doctrine:
    dbal:
        connections:
            default:
                driver: pdo_sqlite
                path: %kernel.cache_dir%/default.db
                charset: UTF8

app_test.php

相关行应该是:$kernel = new AppKernel('test', true);

AppKernel.php

相关行应该是:if (in_array($this->getEnvironment(), ['dev', 'test'])) {

behat.yml

关注app_test.php.

default:
    extensions:
        Behat\Symfony2Extension: ~
        Behat\MinkExtension:
            base_url: http://your_app_domain.dev/app_test.php
        ...
        ...
        ...

虚拟主机设置:

<VirtualHost *:80>
   ServerName your_app_domain.dev
   DocumentRoot "/path/to/your/app/web"

   <Directory "/path/to/your/app/web">
       Options Indexes FollowSymlinks
       AllowOverride All
       Order allow,deny
       Allow from all
   </Directory>

   ErrorLog ${APACHE_LOG_DIR}/your_app_domain.dev.error.log
   CustomLog ${APACHE_LOG_DIR}/your_app_domain.dev.access.log combined
</VirtualHost>

一些资料:

结果:

如果您调用 http://your_app_domain.dev/app_dev.php,它将使用配置中的默认数据库设置,但如果您调用 http://your_app_domain.dev/app_test.php,则它将使用 config_test 设置。