2017-03-27 164 views
1

我試圖在symfony2中的behat測試中使用sqlite基礎。就我而言,symfony2中的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」:{「_ controller」:「FOS \ UserBundle \ Controller \ SecurityController :: checkAction」,「_ route」:「fos_user_security_check」},「request_uri」:「http://localhost/app_test.php/login_check」 「:」POST「} [] [2017-03-27 10:22:10] security.INFO:身份驗證請求失敗。 {「exception」:「[object](Symfony \ Component \ Security \ Core \ Exception \ AuthenticationServiceException(代碼:0):驅動程序中發生異常:SQLSTATE [HY000] [14]無法在/ var/www中打開數據庫文件/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]無法打開數據庫文件打開數據庫文件在/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」:{「_ controller」:「FOS \ UserBundle \ Controller \ SecurityController :: loginAction」,「_ route」:「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),並被正確的用戶和組使用。

回答

3

您config_test.yml改成這樣:

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

然後再授予正確的權限顯示在這裏:Setting up or Fixing File Permissions你會在2或第3根據您的操作系統上運行命令。

+0

This works great!謝謝。我只是不明白一件事。這個default.db是自動生成的。由於它在緩存目錄中生病會丟失它,如果生病緩存清除。我怎麼能告訴它與我的桌子和燈具生成基地? – Megami

+0

好吧,我發現代碼重置behat中的圖像數據庫。 '/ ** * @ BeforeScenario * * @Given數據庫是乾淨 */ 公共函數theDatabaseIsClean() { EXEC( '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的特徵上下文文件中的每個behat場景之前加載學說數據裝置](http://www.inanzzz.com/index.php/post/ ypah /加載-學說-數據燈具前方的每個-貝哈特-場景中之特徵的上下文的文件的-symfony的) – BentCoder

0

如果你去你parameters.yml文件,你應該看到的路徑,像這樣:database_path: '%kernel.project_dir%/var/data/data.sqlite',另一提醒:/var創建一個目錄,並把你的data.sqlite文件它

希望它能幫助:)