2017-03-27 4 views
1

symfony2의 내 behat 테스트에서 sqlite 기반을 사용하려고합니다. 지금까지 심포니 2에서의 behat은 저의 기초를 발견하고 그 안에 비품을 만들 수 있습니다. 문제는 내 테스트 사이트가이베이스에 연결할 수 없다는 것입니다. Symfony2가 sqlite에 연결할 수 없습니다.

은 내 config_test.yml : 이것은

doctrine: 
    dbal: 
     driver: pdo_sqlite 
     host:  127.0.0.1 
     dbname: "%database_name%_test" 
     path:  tests/eg_test.db 

config.yml : 이것은

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

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://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 

내 사이트에. 사용자가 존재하는지 여부는 중요하지 않습니다. 비밀 번호가 잘못되었거나 잘못된 것입니다. 사이트처럼 보이는 것만으로 기지에 연결되지 않습니다.

[2017-03-27 10:22:09] request.INFO : 일치하는 경로 "fos_user_security_check". { "route": "fos_user_security_check", "route_parameters": { "_ 컨트롤러": "FOS \ UserBundle \ Controller \ SecurityController :: checkAction", "_ 경로": "fos_user_security_check"}, "request_uri": "http://localhost/app_test.php/login_check", "메소드 ":"POST "} [] [2017-03-27 10:22:10] security.INFO : 인증 요청에 실패했습니다. 드라이버에서 예외가 발생했습니다 : SQLSTATE [HY000] [14]/var/www에서 데이터베이스 파일을 열 수 없습니다 (예외 : "[object] (Symfony \ Component \ Security \ Core \ Exception \ AuthenticationServiceException (code : 0) /vendor/symfony/symfony/src/Symfony/Component/Security/Core/Authentication/Provider/DaoAuthenticationProvider.php:94, Doctrine \ DBAL \ Exception \ ConnectionException (코드 : 0) : 드라이버에서 예외가 발생했습니다 : SQLSTATE [HY000] [14] /var/www/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractSQLiteDriver.php:82, Doctrine \ DBAL \ Driver \ PDOException (코드 : 14)에서 데이터베이스 파일을 열 수 없습니다 : SQLSTATE [HY000 ] [14] /var/www/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php:47, PDOException (코드 : 14)에서 데이터베이스 파일을 열 수 없습니다 : SQLSTATE [HY000] [14] unable 데이터베이스 파일을 열려면 /var/www/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php:43) "} [] [2017-03-27 10:22:10] security.DEBUG : 인증 실패, 리디렉션 트리거 됨. { "failure_path": "/ login"} [] [2017-03-27 10:22:10] request.INFO : 일치하는 경로 "fos_user_security_login". { "route": "fos_user_security_login", "route_parameters": { "_ 컨트롤러": "FOS \ UserBundle \ Controller \ SecurityController :: loginAction", "_ 경로": "fos_user_security_login"}, "request_uri": "http://localhost/app_test.php/login", "메소드 ":"GET "} [] [2017-03-27 10:22:10] security.INFO : TokenStorage를 익명 토큰으로 채 웁니다. [] []

을 그리고 난 브라우저에서 로그인 할 때이 내가 내 사이트에서 얻을 오류입니다 :

인증 요청이 시스템 문제로 인해 처리 할 수 ​​없습니다.

드라이버에서 발생 예외 : SQLSTATE [HY000] [14] 데이터베이스 파일을

을 열 수 없습니다 내가 만든 내 sqlite가

그리고 오류가 나는 새로운 사용자를 등록 할 때 데이터베이스를 표준 mysql 기반 메신저에 가까운 prod를 사용합니다. 그 후 나는 bin/console doctrine:schema:update --force --env=test을 사용했습니다. 내 데이터베이스가 좋은 파일 mod (-rwxrwxr-x)를 가지며 올바른 사용자와 그룹에 의해 사용됩니다.올바른 사용 권한이 여기에 표시 부여 후

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

을 그리고 : Setting up or Fixing File Permissions 당신은 2 또는 3 중 하나는 운영 체제에 따라에서 명령을 실행하는거야

답변

3
이에 config_test.yml 변경

.

+0

위대한 작품입니다! 감사. 나는 단지 하나의 것을 이해하지 못한다. 이 default.db는 자동으로 생성됩니다. 캐시를 지키면 캐시가 지워 지므로 잃어 버리게됩니다. 테이블과 비품으로 기본을 생성한다고 어떻게 말할 수 있습니까? – Megami

+0

좋아, 내가 코드에서 이미지에서 데이터베이스를 재설정 발견했다. '/ ** * @ BeforeScenario * 데이터베이스가 깨끗한 * @Given */ 공공 기능 theDatabaseIsClean() { 간부 ('PHP 응용 프로그램/콘솔 캐시 : 투명 --env = 테스트'); exec ('php app/console doctrine : database : create --env = test --force'); exec ('php app/console doctrine : schema : update --env = test --force'); exec ('cp tests/features/database/eg_test.db var/cache/test/default.db'); }' – Megami

+0

symfony + Behat 방식으로 할 수 있습니다 : [symfony의 feature context 파일에서 각 동작 시나리오 전에 doctrine 데이터 픽스쳐로드하기] (http://www.inanzzz.com/index.php/post/) sympony의 -pre-context-file-of-symfony 내에서 ypah/loading-doctrine-data-fixtures-before-each-behat- – BentCoder

0

당신이 당신의 parameters.yml 파일로 이동하는 경우 경로를 참조해야한다, 이런 식으로 뭔가 : database_path: '%kernel.project_dir%/var/data/data.sqlite'가, 또 다른 조언은 :

이 희망 /var에 디렉토리를 만들고 거기에 당신의 data.sqlite 파일을 넣어 그것을하는 데 도움이 :)