2017-03-22 2 views
1

내 symfony2 응용 프로그램에서 테스트 용으로 사용하고 있습니다. 지금은 두 개의 데이터베이스가 필요합니다. 사용자가 사이트에서 무언가를하고있는 것처럼 정상적인 사용을 위해 우선 (현재 작동 중). 테스트 용으로 두 번째 데이터베이스 (존재하고 동작 함).Symfony2 테스트 중 두 번째 데이터베이스 사용

내가 지금 얻은 것은 두 개의 작동하는 데이터베이스이며, 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에서 dev 환경을 사용하는 것과 마찬가지로 – Miguelo

답변

1

이것은 SQL 환경을 테스트 환경으로 사용하지만 원하는 경우 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

REL evant의 행은 다음과 같습니다 app_test.php-if (in_array($this->getEnvironment(), ['dev', 'test'])) {

behat.yml

에주의를.

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> 

일부 정보 :

결과 :

당신이 설정에서 기본 DB 설정을 사용하지만 http://your_app_domain.dev/app_test.php를 호출하는 경우 다음이 config_test 설정을 사용합니다 http://your_app_domain.dev/app_dev.php를 호출하는 경우.

+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