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.
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
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
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