2017-03-22 46 views
1

在我的symfony2應用程序中使用behat進行測試。現在我需要有兩個數據庫。首先(現在正在工作),正常使用,就像用戶在網站上做某些事情一樣。第二個數據庫(存在並且在其上工作),用於測試目的。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 

我能做些什麼來改變數據庫的時間測試中進展?

+0

你是什麼意思網站不使用它?是在執行功能測試時還是在瀏覽到站點進行測試時 – Miguelo

+0

它不使用站點上的測試數據庫。 – Megami

+0

要在您的網站上使用它,您應該確保內核使用測試環境。就像app_dev.php – Miguelo

回答

1

這使用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設置。

+0

除此之外,我不得不將'vhost.conf'中的一行更改爲'location〜^ /(app_dev | app | app_test | config)\。php(/ | $){'它缺少'app_test'部分。現在一切正常,謝謝。而即時通訊使用MySQL。現在我讀了它,似乎像sqlite會是更好的選擇。我會看看如何設置它,謝謝你的幫助。 – Megami

+0

@Megami請注意,我看你是依賴注入服務EwidencjaContext。在behat的情況下,你的上下文應該實現'KernelAwareContext'並從'$ container'訪問服務和參數。一個例子是:[用composer.json安裝behat3](http://www.inanzzz.com/index.php/post/v2zi/installing-behat3-with-composer-json)。這樣你就不需要從behat.yml注入任何東西到你的上下文文件中,並儘可能保持behat.yml的清潔。 – BentCoder

相關問題