我开始使用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
你能给我一个提示或解决这个问题的方法吗?
感谢您的时间:)
答案 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
命令