2014-04-23 5 views
6

benutze Ich fange an, laravel 4 zu benutzen, und ich versuche, Einheitstests zu verwenden, also kann ich mein Leben einfacher machen. Nun, wie ihr alle erraten werdet, ist meine Entwicklung nach dem Testen von PHP-Tests nicht einfacher geworden. Die einfachen Tests sind gut, einfach, aber wenn die Dinge ein bisschen komplizierter werden, gehen sie nicht so, wie ich es tue. Das Problem ist, dass ich einfache Tests durchgeführt habe, aber ich bekomme einen seltsamen Fehler PDOException: could not find driver. Ich habe ein paar Artikel und Beiträge zu diesem Thema gelesen, aber nichts hat mein Problem gelöst. Ich habe php5-mysql installiert und wenn ich php -m anrufe, sagt es, dass ich sowohl PDO als auch pdo_mysql habe. Der eigentliche Befehl, den ich verwenden ist php -m |grep -i "pdo" und der Ausgang ist:PDOException: konnte Treiber nicht finden, wenn ich phpunit

PDO 
pdo_mysql 

Nun, ich habe versucht, Test PDOException Klasse im Browser actualy. Zu diesem Zweck habe ich das mysql Benutzerpasswort zu einem falschen geändert und getestet, was in artisan Server (aufgerufen mit Befehl php artisan serve --->http://localhost:8000/) geschehen wird. Im Browser funktioniert alles wie ein Zauber, aber wenn ich versuche, "phpunit" in der Konsole aufzurufen, ist das Ergebnis nicht dasselbe.

Ich habe versucht zu sehen, ob Webserver und CLI verschiedene Konfigurationsdateien haben, aber es stellt fest, dass die Dateien identisch sind. Die Konfigurationsdateien, die ich im Vergleich sind:

für den Webserver

/etc/php5/apache2/conf.d/20-pdo_mysql.ini 
/etc/php5/apache2/conf.d/05-opcache.ini 
/etc/php5/apache2/conf.d/20-json.ini 
/etc/php5/apache2/conf.d/20-mysql.ini 
/etc/php5/apache2/conf.d/20-mysqli.ini 
/etc/php5/apache2/conf.d/10-pdo.ini 
/etc/php5/apache2/conf.d/20-mcrypt.ini 
/etc/php5/apache2/conf.d/20-curl.ini 
/etc/php5/apache2/php.ini 

für Kommandozeile

/etc/php5/cli/conf.d/20-pdo_mysql.ini 
/etc/php5/cli/conf.d/05-opcache.ini 
/etc/php5/cli/conf.d/20-json.ini 
/etc/php5/cli/conf.d/20-mysql.ini 
/etc/php5/cli/conf.d/20-mysqli.ini 
/etc/php5/cli/conf.d/10-pdo.ini 
/etc/php5/cli/conf.d/20-mcrypt.ini 
/etc/php5/cli/conf.d/20-curl.ini 
/etc/php5/cli/php.ini 

sie den diff Befehl, den ich Benutzer zu vergleichen, wie so diff -s /path/to/file1 /path/to/file2.

Die Fehler wie folgt aussehen:

1) ExampleTest::testBasicExample 
PDOException: could not find driver 

/var/www/smlsspd/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:47 
/var/www/smlsspd/vendor/laravel/framework/src/Illuminate/Database/Connectors/SQLiteConnector.php:22 
/var/www/smlsspd/vendor/laravel/framework/src/Illuminate/Database/Connectors/ConnectionFactory.php:59 
/var/www/smlsspd/vendor/laravel/framework/src/Illuminate/Database/Connectors/ConnectionFactory.php:47 
/var/www/smlsspd/vendor/laravel/framework/src/Illuminate/Database/DatabaseManager.php:127 
/var/www/smlsspd/vendor/laravel/framework/src/Illuminate/Database/DatabaseManager.php:63 
/var/www/smlsspd/vendor/laravel/framework/src/Illuminate/Database/Migrations/DatabaseMigrationRepository.php:167 
/var/www/smlsspd/vendor/laravel/framework/src/Illuminate/Database/Migrations/DatabaseMigrationRepository.php:135 
/var/www/smlsspd/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migrator.php:366 
/var/www/smlsspd/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/MigrateCommand.php:93 
/var/www/smlsspd/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/MigrateCommand.php:56 
/var/www/smlsspd/vendor/laravel/framework/src/Illuminate/Console/Command.php:108 
/var/www/smlsspd/vendor/symfony/console/Symfony/Component/Console/Command/Command.php:241 
/var/www/smlsspd/vendor/laravel/framework/src/Illuminate/Console/Command.php:96 
/var/www/smlsspd/vendor/laravel/framework/src/Illuminate/Console/Application.php:96 
/var/www/smlsspd/vendor/laravel/framework/src/Illuminate/Foundation/Artisan.php:57 
/var/www/smlsspd/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php:208 
/var/www/smlsspd/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php:208 
/var/www/smlsspd/app/tests/TestCase.php:70 
/var/www/smlsspd/app/tests/TestCase.php:70 
/var/www/smlsspd/app/tests/TestCase.php:46 
phar:///var/www/smlsspd/phpunit.phar/phpunit/TextUI/Command.php:179 
phar:///var/www/smlsspd/phpunit.phar/phpunit/TextUI/Command.php:132 

Können Sie mir einen Hinweis oder eine Lösung für dieses Problem geben?

Vielen Dank für Ihre Zeit :)

Antwort

11

Es scheint für die Prüfung SQLite als Datenbank Laravel verwenden. Siehe Backtrace in Zeile 2:

/var/www/smlsspd/vendor/laravel/framework/src/Illuminate/Database/Connectors/SQLiteConnector.php:22 

Aber das scheint nicht auf Ihrem System installiert. Also ich denke, dass Sie den SQLite-Treiber installieren müssen.

+0

Ok, das scheint ein Problem zu sein, weil ich wirklich nicht SQLite PDO Treiber installiert habe. Ich werde die Dinge später ausprobieren. – melanholly

+1

Ich kam endlich nach Hause und testete die Dinge. Es scheint, als ob ich nicht alle Fehlermeldungen gelesen habe. Danke für Ihre Hilfe. – melanholly

8

Wenn Sie SQLite verwenden zum Testen Sie PHP SQLite-Treiber

Für Ubuntu 14,04

sudo apt-get install php5-sqlite 
sudo service apache2 restart 

In ubuntu 16.04 kein php5-sqlite wird benötigt

sudo apt-get install php7.0-sqlite 
sudo service apache2 restart 
1

Unter Windows ich musste Aktivieren Sie extension=php_pdo_sqlite.dll in php.ini.

0

Für diejenigen Laravel Homestead verwenden, stellen Sie sicher, dass Sie phpunit von innerhalb Homestead laufen lassen und nicht auf dem lokalen Computer! Sie können SSH into it mit vagrant ssh.

Wie andere bereits erwähnt haben, erfordert es SQLite und damit die Ausführung in Ihrer virtuellen Maschine stellt sicher, dass es für Ihren Test verfügbar ist.

Verwandte Themen