2017-03-27 16 views
1

Ich versuche, die sqlite-Basis in meinen behat-Tests in symfony2 zu verwenden. Soweit ich weiß, findet Behat in Symfony2 meine Basis und kann darin Fixtures erstellen. Problem ist, dass meine Testseite keine Verbindung zu dieser Basis herstellen kann.Symfony2 kann keine Verbindung mit sqlite herstellen

Das ist mein config_test.yml:

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

Dies ist mein config.yml:

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

Das ist mein 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 

Dies ist melde ich mich nach dem Versuch, wieder anmelden in meine Website. Es spielt keine Rolle, ob der Benutzer existiert oder nicht. Es ist also nicht falsches falsches Passwort oder so etwas. Scheint so, als ob die Seite nicht mit der Base verbunden ist.

[2017-03-27 10:22:09] anfrage.INFO: Passende Route "fos_user_security_check". {"route": "fos_user_security_check", "route_parameters": {"_ controller": "FOS \ BenutzerBundle \ Controller \ SecurityController :: checkAction", "_ route": "fos_user_security_check"}, "request_uri": "http://localhost/app_test.php/login_check", "Methode ":" POST "} [] [2017-03-27 10:22:10] security.INFO: Authentifizierungsanfrage fehlgeschlagen. {"Ausnahme": "[Objekt] (Symfony \ Component \ Sicherheit \ Core \ Exception \ AuthenticationServiceException (code: 0): Im Treiber ist eine Ausnahme aufgetreten: SQLSTATE [HY000] [14] kann die Datenbankdatei unter/var/www nicht öffnen /vendor/symfony/symfony/src/Symfony/Component/Security/Core/Authentication/Provider/DaoAuthenticationProvider.php:94, Doctrine \ DBAL \ Exception \ ConnectionException (code: 0): Im Treiber ist eine Ausnahme aufgetreten: SQLSTATE [HY000] [14] Datenbankdatei unter /var/www/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractSQLiteDriver.php:82, Doctrine \ DBAL \ Driver \ PDOException (Code: 14) nicht öffnen: SQLSTATE [HY000 ] [14] Datenbankdatei unter /var/www/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php:47 nicht öffnen, PDOException (Code: 14): SQLSTATE [HY000] [14] nicht möglich Öffnen der Datenbankdatei unter /var/www/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php:43) "} [] [2017-03-27 10:22:10] security.DEBUG : Authentifizierungsfehler, Umleitung ausgelöst. {"failure_path": "/ login"} [] [2017-03-27 10:22:10] request.INFO: Passende Route "fos_user_security_login". {"route": "fos_user_security_login", "route_parameters": {"_ controller": "FOS \ BenutzerBundle \ Controller \ SecurityController :: loginAction", "_ route": "fos_user_security_login"}, "request_uri": "http://localhost/app_test.php/login", "Methode ":" GET "} [] [2017-03-27 10:22:10] security.INFO: Die TokenStorage mit einem anonymen Token gefüllt. [] []

Und das ist Fehler, den ich auf meiner Seite, wenn ich von Browser einzuloggen versuchen:

Authentifizierungsanforderung nicht aufgrund eines Systemproblem verarbeitet werden kann.

Und Fehler, wenn ich versuche, neue Benutzer zu registrieren:

Eine aufgetreten Ausnahme Treiber: SQLSTATE [HY000] [14] derzeit keine Datei öffnen Datenbank

Ich habe meine SQLite Datenbank so nah an der Standard-MySQL-Basis im auf Prod verwenden. Danach habe ich bin/console doctrine:schema:update --force --env=test verwendet. Meine Datenbank hat eine gute Dateimod (-rwxrwxr-x) und wird von rechtem Benutzer und Gruppe verwendet.

Antwort

3

Ihre config_test.yml Um dies zu ändern:

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

Und dann hier zeigen richtige Berechtigungen erteilen: Setting up or Fixing File Permissions Sie werden entweder 2. oder 3. je nach Betriebssystem in Befehle auszuführen.

+0

Das funktioniert super! Vielen Dank. Ich verstehe nur eine Sache nicht. Diese default.db wird automatisch generiert. Da es im Cache-Verzeichnis ist, wird es krank, wenn es Cache gelöscht wird. Wie kann ich sagen, dass ich Base mit meinen Tischen und Fixtures generieren soll? – Megami

+0

Ok, ich habe Code gefunden, um die Datenbank aus dem Image in Behat zurückzusetzen. '/ ** * @ BeforeScenario * * @Given die Datenbank */ public function theDatabaseIsClean() { exec ('php app/Konsole Cache: klar --env = test') sauber ist; exec ('php app/konsolenlehre: datenbank: create --env = test --force'); exec ('php app/konsolenlehre: schema: update --env = test --force'); exec ('cp testet/features/database/eg test.db var/cache/test/default.db'); } ' – Megami

+0

Sie können es mit Symfony + Behat Weg tun, wie hier gezeigt: [Lade Doktrin Daten Fixtures vor jedem behat Szenarien in Feature-Kontext-Datei von Symfony] (http://www.inanzzz.com/index.php/post/ Ypah/Laden-Doktrin-Daten-Fixtures-vor-jedem-behat-Szenarien-innerhalb-Feature-Kontext-Datei-of-Symfony) – BentCoder

0

Wenn Sie Ihre parameters.yml Datei gehen Sie den Pfad sehen sollte, so etwas wie dieses: database_path: '%kernel.project_dir%/var/data/data.sqlite', eine andere Beratung: ein Verzeichnis in /var erstellen und

Hoffnung in sie Ihre data.sqlite Datei setzen hilft es :)

Verwandte Themen