PDOException:使用phpunit时找不到驱动程序

时间:2014-04-23 13:26:45

标签: php mysql laravel pdo phpunit

我开始使用laravel 4,我正在尝试开始使用单元测试,这样我就可以让我的生活更轻松。好吧,你们所有人都会猜测我的开发在尝试phpunit测试后并没有变得容易。简单的测试很容易,但是当事情开始变得有点复杂时,它们就不会像我一样。

问题是我进行了简单的测试,但是我得到了一些奇怪的错误PDOException: could not find driver。我已经阅读了一些文章并发表了这个主题,但没有解决我的问题。我安装了php5-mysql,当我调用php -m时,它说我有PDO和pdo_mysql。我使用的实际命令是php -m |grep -i "pdo",输出是:

PDO
pdo_mysql

我已经尝试在浏览器中实际测试PDOException类。为此,我将mysql用户密码更改为不正确的密码,并测试了 artisan服务器中的内容(使用命令php artisan serve ---> http://localhost:8000/调用)。在浏览器中,一切都可以作为魅力,但当我尝试在控制台中调用``phpunit`时,结果就不一样了。

我试图看看webserver和cli是否有不同的配置文件,但事实证明文件是相同的。我比较的配置文件是:

用于网络服务器

/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

用于命令行

/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

比较它们我使用diff命令,如diff -s /path/to/file1 /path/to/file2

错误如下所示:

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

你能给我一个提示或解决这个问题的方法吗?

感谢您的时间:)

7 个答案:

答案 0 :(得分:15)

Laravel似乎使用SQLite作为数据库进行测试。请参阅第2行的回溯:

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

但这似乎没有安装在您的系统上。所以我认为你需要安装SQLite驱动程序。

答案 1 :(得分:13)

如果您使用sqlite进行测试,则需要php sqlite驱动程序

对于Ubuntu 14.04

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

在ubuntu 16.04中没有php5-sqlite

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

答案 2 :(得分:3)

在Windows上,我必须在php.ini中激活extension=php_pdo_sqlite.dll

答案 3 :(得分:2)

如果您正在使用SqLite,则必须输入php.init并取消注释此行。

;extension = pdo_sqlite

答案 4 :(得分:1)

对于使用Laravel Homestead的用户,请确保您在 Homestead内的中运行phpunit而不是在本地计算机上运行vagrant ssh!您可SSH into it使用let nodeList = document.querySelectorAll(".box_1"); for (let i = 0; i < 3; i++) { nodeList[i].className = "box_2"; }

正如其他人所提到的,它需要SQLite,因此在您的虚拟机中运行它可确保您的测试可用。

答案 5 :(得分:1)

php7.0-sqlite不再使用php7.1-sqlite

sudo apt-get install php7.1-sqlite3
sudo service apache2 restart

答案 6 :(得分:0)

首先,使用以下命令安装PHP的SQLite sudo apt-get install php-sqlite3

然后检查您的php.ini并确保未注释以下行

;extension = pdo_sqlite

然后,如果您使用的是Apache

sudo service apache2 restart

或者如果您使用的是Nginx

sudo service nginx restart


注意:如果您不知道php.ini路径在哪里,请使用php -i |grep php.ini命令