2014-04-23 15 views
6

Tôi bắt đầu sử dụng laravel 4 và tôi đang cố gắng bắt đầu sử dụng các bài kiểm tra đơn vị để tôi có thể làm cho cuộc sống của mình dễ dàng hơn. Cũng như tất cả các bạn sẽ đoán sự phát triển của tôi đã không trở nên dễ dàng hơn sau khi thử nghiệm phpunit. Các xét nghiệm đơn giản là tốt, dễ dàng nhưng khi mọi thứ bắt đầu phức tạp hơn một chút thì chúng không đi như tôi nghĩ.PDOException: không thể tìm thấy trình điều khiển khi sử dụng phpunit

Vấn đề là tôi đã thực hiện các thử nghiệm đơn giản nhưng tôi gặp phải một số lỗi lạ PDOException: could not find driver. Tôi đã đọc một vài bài báo và đăng bài về chủ đề này nhưng không có gì giải quyết được vấn đề của tôi. Tôi đã cài đặt php5-mysql và khi tôi gọi php -m nó nói rằng tôi có cả PDO và pdo_mysql. Lệnh thực tế tôi sử dụng là php -m |grep -i "pdo" và đầu ra là:

PDO 
pdo_mysql 

Vâng, tôi đã cố gắng để actualy lớp PDOException thử nghiệm trong trình duyệt. Vì mục đích đó, tôi đã thay đổi mật khẩu người dùng mysql thành không chính xác và kiểm tra những gì sẽ xảy ra trong máy chủ nghệ nhân (được gọi với lệnh php artisan serve --->http://localhost:8000/). Trong tất cả mọi thứ trình duyệt hoạt động như một sự quyến rũ nhưng khi tôi cố gắng gọi `` phpunit` trong giao diện điều khiển kết quả là không giống nhau.

Tôi đã cố gắng xem liệu máy chủ web và cli có các tệp cấu hình khác nhau không nhưng các tệp đó giống hệt nhau. Các tập tin cấu hình mà tôi đã so sánh là:

cho máy chủ web

/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 

cho dòng lệnh

/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 

để so sánh chúng tôi sử dụng lệnh diff như vậy diff -s /path/to/file1 /path/to/file2.

Các lỗi giống như thế này:

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 

Bạn có thể cho tôi một gợi ý hay giải pháp cho vấn đề này?

Cảm ơn bạn đã dành thời gian :)

Trả lời

11

Có vẻ như Laravel đang sử dụng SQLite làm cơ sở dữ liệu để thử nghiệm. Xem backtrace tại dòng 2:

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

Nhưng điều này có vẻ chưa được cài đặt trên hệ thống của bạn. Vì vậy, tôi nghĩ rằng bạn cần phải cài đặt trình điều khiển SQLite.

+0

Ok điều đó dường như là một vấn đề vì tôi thực sự chưa cài đặt trình điều khiển PDO SQLite. Tôi sẽ kiểm tra những điều sau này. – melanholly

+1

Tôi cuối cùng về nhà và thử nghiệm mọi thứ. Có vẻ như tôi không đọc tất cả các thông báo lỗi. Cảm ơn sự giúp đỡ của bạn. – melanholly

8

Nếu bạn đang sử dụng SQLite để thử nghiệm, bạn sẽ cần trình điều khiển php sql

Đối với Ubuntu 14,04

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

Trong ubuntu 16.04 có được không php5-sqlite

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

Trên Windows tôi đã phải kích hoạt extension=php_pdo_sqlite.dll trong php.ini.

0

Đối với những người sử dụng Laravel Homestead, hãy đảm bảo bạn đang chạy phpunit từ trong vòng Không có trên máy địa phương của bạn! Bạn có thể SSH into it với vagrant ssh.

Như những người khác đã đề cập, nó yêu cầu SQLite và do đó chạy nó trong máy ảo của bạn đảm bảo rằng nó có sẵn cho thử nghiệm của bạn.

Các vấn đề liên quan