amitsachdeva45's avatar

PDO Exception: Could not find driver while phpunit test

Hi,

I am working on Laravel 5.5 Phpunit test. I am getting error ** PDO Exception: could not find driver** Laravel= 5.5 Php = 7.1.3 Phpunit = 7.5

Can anyone suggest me how to solve this issue?

Thanks in advance

error:PDOException: could not find driver in /home/workland/Downloads/project/marketplace-api/src/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php:27\n
Stack trace:\n
#0 /home/workland/Downloads/project/marketplace-api/src/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php(27): PDO->__construct('mysql:host=192....', 'root', 'somemarketplace', Array)\n
#1 /home/workland/Downloads/project/marketplace-api/src/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php(64): Doctrine\DBAL\Driver\PDOConnection->__construct('mysql:host=192....', 'root', 'somemarketplace', Array)\n
#2 /home/workland/Downloads/project/marketplace-api/src/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php(43): Illuminate\Database\Connectors\Connector->createPdoConnection('mysql:host=192....', 'root', 'somemarketplace', Array)\n
#3 /home/workland/Downloads/project/marketplace-api/src/vendor/laravel/framework/src/Illuminate/Database/Connectors/MySqlConnector.php(24): Illuminate\Database\Connectors\Connector->createConnection('mysql:host=192....', Array, Array)\n
#4 /home/workland/Downloads/project/marketplace-api/src/vendor/laravel/framework/src/Illuminate/Database/Connectors/ConnectionFactory.php(183): Illuminate\Database\Connectors\MySqlConnector->connect(Array)\n
#5 [internal function]: Illuminate\Database\Connectors\ConnectionFactory->Illuminate\Database\Connectors\{closure}()\n
#6 /home/workland/Downloads/project/marketplace-api/src/vendor/laravel/framework/src/Illuminate/Database/Connection.php(915): call_user_func(Object(Closure))\n
#7 /home/workland/Downloads/project/marketplace-api/src/app/Http/Controllers/AccountController.php(46): Illuminate\Database\Connection->getPdo()\n
#8 /home/workland/Downloads/project/marketplace-api/src/app/Http/Controllers/AccountController.php(114): App\Http\Controllers\AccountController->insertCompanyDescription(Object(Illuminate\Http\Request), 58010)\n
#9 [internal function]: App\Http\Controllers\AccountController->create(Object(Illuminate\Http\Request))\n
#10 /home/workland/Downloads/project/marketplace-api/src/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): call_user_func_array(Array, Array)\n
#11 /home/workland/Downloads/project/marketplace-api/src/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(45): Illuminate\Routing\Controller->callAction('create', Array)\n
#12 /home/workland/Downloads/project/marketplace-api/src/vendor/laravel/framework/src/Illuminate/Routing/Route.php(212): Illuminate\Routing\ControllerDispatcher->dispatch(Object(Illuminate\Routing\Route), Object(App\Http\Controllers\AccountController), 'create')\n
#13 /home/workland/Downloads/project/marketplace-api/src/vendor/laravel/framework/src/Illuminate/Routing/Route.php(169): Illuminate\Routing\Route->runController()\n
#14 /home/workland/Downloads/project/marketplace-api/src/vendor/laravel/framework/src/Illuminate/Routing/Router.php(658): Illuminate\Routing\Route->run()\n
#15 /home/workland/Downloads/project/marketplace-api/src/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(30): Illuminate\Routing\Router->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))\n
#16 /home/workland/Downloads/project/marketplace-api/src/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(41): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))\n
#17 /home/workland/Downloads/project/marketplace-api/src/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Illuminate\Routing\Middleware\SubstituteBindings->handle(Object(Illuminate\Http\Request), Object(Closure))\n
#18 /home/workland/Downloads/project/marketplace-api/src/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))\n
#19 /home/workland/Downloads/project/marketplace-api/src/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(57): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))\n
#20 /home/workland/Downloads/project/marketplace-api/src/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Illuminate\Routing\Middleware\ThrottleRequests->handle(Object(Illuminate\Http\Request), Object(Closure), 60, '1')\n
#21 /home/workland/Downloads/project/marketplace-api/src/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))\n
#22 /home/workland/Downloads/project/marketplace-api/src/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(102): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))\n
#23 /home/workland/Downloads/project/marketplace-api/src/vendor/laravel/framework/src/Illuminate/Routing/Router.php(660): Illuminate\Pipeline\Pipeline->then(Object(Closure))\n
#24 /home/workland/Downloads/project/marketplace-api/src/vendor/laravel/framework/src/Illuminate/Routing/Router.php(635): Illuminate\Routing\Router->runRouteWithinStack(Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request))\n
#25 /home/workland/Downloads/project/marketplace-api/src/vendor/laravel/framework/src/Illuminate/Routing/Router.php(601): Illuminate\Routing\Router->runRoute(Object(Illuminate\Http\Request), Object(Illuminate\Routing\Route))\n
#26 /home/workland/Downloads/project/marketplace-api/src/vendor/laravel/framework/src/Illuminate/Routing/Router.php(590): Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request))\n
#27 /home/workland/Downloads/project/marketplace-api/src/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(176): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))\n
#28 /home/workland/Downloads/project/marketplace-api/src/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(30): Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\{closure}(Object(Illuminate\Http\Request))\n
#29 /home/workland/Downloads/project/marketplace-api/src/app/Http/Middleware/CorsMiddleware.php(32): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))\n
#30 /home/workland/Downloads/project/marketplace-api/src/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): App\Http\Middleware\CorsMiddleware->handle(Object(Illuminate\Http\Request), Object(Closure))\n
#31 /home/workland/Downloads/project/marketplace-api/src/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))\n
#32 /home/workland/Downloads/project/marketplace-api/src/app/Http/Middleware/ParseMultipartFormDataInputForNonPostRequests.php(21): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))\n
#33 /home/workland/Downloads/project/marketplace-api/src/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): App\Http\Middleware\ParseMultipartFormDataInputForNonPostRequests->handle(Object(Illuminate\Http\Request), Object(Closure))\n
#34 /home/workland/Downloads/project/marketplace-api/src/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))\n
#35 /home/workland/Downloads/project/marketplace-api/src/vendor/fideloper/proxy/src/TrustProxies.php(56): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))\n
#36 /home/workland/Downloads/project/marketplace-api/src/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Fideloper\Proxy\TrustProxies->handle(Object(Illuminate\Http\Request), Object(Closure))\n
#37 /home/workland/Downloads/project/marketplace-api/src/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))\n
#38 /home/workland/Downloads/project/marketplace-api/src/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(30): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))\n
#39 /home/workland/Downloads/project/marketplace-api/src/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle(Object(Illuminate\Http\Request), Object(Closure))\n
#40 /home/workland/Downloads/project/marketplace-api/src/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))\n
#41 /home/workland/Downloads/project/marketplace-api/src/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(30): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))\n
#42 /home/workland/Downloads/project/marketplace-api/src/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle(Object(Illuminate\Http\Request), Object(Closure))\n
#43 /home/workland/Downloads/project/marketplace-api/src/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))\n
#44 /home/workland/Downloads/project/marketplace-api/src/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))\n
#45 /home/workland/Downloads/project/marketplace-api/src/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Illuminate\Foundation\Http\Middleware\ValidatePostSize->handle(Object(Illuminate\Http\Request), Object(Closure))\n
#46 /home/workland/Downloads/project/marketplace-api/src/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))\n
#47 /home/workland/Downloads/project/marketplace-api/src/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php(46): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))\n
#48 /home/workland/Downloads/project/marketplace-api/src/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode->handle(Object(Illuminate\Http\Request), Object(Closure))\n
#49 /home/workland/Downloads/project/marketplace-api/src/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))\n
#50 /home/workland/Downloads/project/marketplace-api/src/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(102): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))\n
#51 /home/workland/Downloads/project/marketplace-api/src/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(151): Illuminate\Pipeline\Pipeline->then(Object(Closure))\n
#52 /home/workland/Downloads/project/marketplace-api/src/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(116): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request))\n
#53 /home/workland/Downloads/project/marketplace-api/src/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php(345): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request))\n
#54 /home/workland/Downloads/project/marketplace-api/src/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php(317): Illuminate\Foundation\Testing\TestCase->call('post', 'http://192.168....', Array, Array, Array, Array, '{"email":"workl...')\n
#55 /home/workland/Downloads/project/marketplace-api/src/tests/Unit/AccountControllerTest.php(46): Illuminate\Foundation\Testing\TestCase->json('post', 'http://192.168....', Array)\n
#56 /home/workland/Downloads/project/marketplace-api/src/vendor/phpunit/phpunit/src/Framework/TestCase.php(1154): Tests\Unit\AccountControllerTest->testCreateTest()\n
#57 /home/workland/Downloads/project/marketplace-api/src/vendor/phpunit/phpunit/src/Framework/TestCase.php(842): PHPUnit\Framework\TestCase->runTest()\n
#58 /home/workland/Downloads/project/marketplace-api/src/vendor/phpunit/phpunit/src/Framework/TestResult.php(693): PHPUnit\Framework\TestCase->runBare()\n
#59 /home/workland/Downloads/project/marketplace-api/src/vendor/phpunit/phpunit/src/Framework/TestCase.php(796): PHPUnit\Framework\TestResult->run(Object(Tests\Unit\AccountControllerTest))\n
#60 /home/workland/Downloads/project/marketplace-api/src/vendor/phpunit/phpunit/src/Framework/TestSuite.php(746): PHPUnit\Framework\TestCase->run(Object(PHPUnit\Framework\TestResult))\n
#61 /home/workland/Downloads/project/marketplace-api/src/vendor/phpunit/phpunit/src/Framework/TestSuite.php(746): PHPUnit\Framework\TestSuite->run(Object(PHPUnit\Framework\TestResult))\n
#62 /home/workland/Downloads/project/marketplace-api/src/vendor/phpunit/phpunit/src/Framework/TestSuite.php(746): PHPUnit\Framework\TestSuite->run(Object(PHPUnit\Framework\TestResult))\n
#63 /home/workland/Downloads/project/marketplace-api/src/vendor/phpunit/phpunit/src/TextUI/TestRunner.php(652): PHPUnit\Framework\TestSuite->run(Object(PHPUnit\Framework\TestResult))\n
#64 /home/workland/Downloads/project/marketplace-api/src/vendor/phpunit/phpunit/src/TextUI/Command.php(206): PHPUnit\TextUI\TestRunner->doRun(Object(PHPUnit\Framework\TestSuite), Array, true)\n
#65 /home/workland/Downloads/project/marketplace-api/src/vendor/phpunit/phpunit/src/TextUI/Command.php(162): PHPUnit\TextUI\Command->run(Array, true)\n
#66 /home/workland/Downloads/project/marketplace-api/src/vendor/phpunit/phpunit/phpunit(61): PHPUnit\TextUI\Command::main()\n
#67 {main}\n

This is my AccountControllerTest test class

<?php

namespace Tests\Feature;

use Illuminate\Foundation\Testing\WithoutMiddleware;
use Tests\TestCase;
use Illuminate\Foundation\Testing\RefreshDatabase;
use GuzzleHttp\Client;
use Illuminate\Http\Request;
use App\Http\Controllers\AccountController;
use Exception;

class AccountControllerTest extends TestCase
{
    public function testCreateTest()
    {
        $uniqueEmailAddress = "test_".rand(1000, 9999)."@gmail.com";
        $jsonArr = array();
        $jsonArr['email'] = $uniqueEmailAddress;
        $jsonArr['company_name'] = "test_47";
        $jsonArr['address'] = "XYZ";
        $jsonArr['service_type'] = 'partner';
        $jsonArr['account_type'] = 'seller';
        $jsonArr['language'] = 'en';
        $jsonArr['phone'] = '00000000000';
        $response =  $this->withHeaders([
              'Content-type' => 'application/json'
         ])->json('POST', '/account', $jsonArr);
    }

This is my AccountController

<?php 

use DB;

public function create($request)
    {
        if ($request->company_description_en) {
            $values = array('account_id' => 1,'company_description'
             => $request->company_description_en, 'locale' => 'en');
            DB::table('account_translations')->insert($values);
        }
        if ($request->company_description_fr) {
            $values = array('account_id' => 1,'company_description'
             => $request->company_description_fr, 'locale' => 'fr');
            DB::table('account_translations')->insert($values);
        }
    }

This is my env File

APP_NAME= Marketplace
APP_ENV= local
APP_KEY= base64:PMwGGZXtY+8WmiLWKWD4HCehn6uAztQZg2JLtxsWm9c=
APP_DEBUG= 'TRUE'
APP_LOG_LEVEL= debug
APP_URL= http://localhost

DB_CONNECTION = mysql
DB_HOST = 192.168.1.3
DB_PORT = 33062
DB_DATABASE = marketplace
DB_USERNAME = root
DB_PASSWORD = somemarketplace

This is config/database.php

<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Default Database Connection Name
    |--------------------------------------------------------------------------
    |
    | Here you may specify which of the database connections below you wish
    | to use as your default connection for all database work. Of course
    | you may use many connections at once using the Database library.
    |
    */

    'default' => env('DB_CONNECTION', 'mysql'),

    /*
    |--------------------------------------------------------------------------
    | Database Connections
    |--------------------------------------------------------------------------
    |
    | Here are each of the database connections setup for your application.
    | Of course, examples of configuring each database platform that is
    | supported by Laravel is shown below to make development simple.
    |
    |
    | All database work in Laravel is done through the PHP PDO facilities
    | so make sure you have the driver for your particular database of
    | choice installed on your machine before you begin development.
    |
    */

    'connections' => [

        'sqlite' => [
            'driver' => 'sqlite',
            'database' => env('DB_DATABASE', database_path('database.sqlite')),
            'prefix' => '',
        ],

        'mysql' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'marketplace'),
            'username' => env('DB_USERNAME', 'workland'),
            'password' => env('DB_PASSWORD', 'workland'),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'strict' => true,
            'engine' => 'InnoDB ROW_FORMAT=DYNAMIC',
        ],
        
        'pgsql' => [
            'driver' => 'pgsql',
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '5432'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'charset' => 'utf8',
            'prefix' => '',
            'schema' => 'public',
            'sslmode' => 'prefer',
        ],

        'sqlsrv' => [
            'driver' => 'sqlsrv',
            'host' => env('DB_HOST', 'localhost'),
            'port' => env('DB_PORT', '1433'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'charset' => 'utf8',
            'prefix' => '',
        ],

    ],

    /*
    |--------------------------------------------------------------------------
    | Migration Repository Table
    |--------------------------------------------------------------------------
    |
    | This table keeps track of all the migrations that have already run for
    | your application. Using this information, we can determine which of
    | the migrations on disk haven't actually been run in the database.
    |
    */

    'migrations' => 'migrations',

    /*
    |--------------------------------------------------------------------------
    | Redis Databases
    |--------------------------------------------------------------------------
    |
    | Redis is an open source, fast, and advanced key-value store that also
    | provides a richer set of commands than a typical key-value systems
    | such as APC or Memcached. Laravel makes it easy to dig right in.
    |
    */

    'redis' => [

        'client' => 'predis',

        'default' => [
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_PORT', 6379),
            'database' => 0,
        ],

    ],

];

This is phpunit.xml file

<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
         backupStaticAttributes="false"
         bootstrap="vendor/autoload.php"
         colors="true"
         convertErrorsToExceptions="true"
         convertNoticesToExceptions="true"
         convertWarningsToExceptions="true"
         processIsolation="false"
         stopOnFailure="false">
    <testsuites>
        <testsuite name="Feature">
            <directory suffix="Test.php">./tests/Feature</directory>
        </testsuite>

        <testsuite name="Unit">
            <directory suffix="Test.php">./tests/Unit</directory>
        </testsuite>
    </testsuites>
    <filter>
        <whitelist processUncoveredFilesFromWhitelist="true">
            <directory suffix=".php">./app</directory>
        </whitelist>
    </filter>
    <php>
        <env name="APP_ENV" value="testing"/>
        <env name="CACHE_DRIVER" value="array"/>
        <env name="SESSION_DRIVER" value="array"/>
        <env name="QUEUE_DRIVER" value="sync"/>
    </php>
</phpunit>
0 likes
1 reply
Nakov's avatar

So in your phpunit.xml file you should set the database connection to be used, you can use this, below the env add this:

<server name="DB_CONNECTION" value="sqlite"/>
<server name="DB_DATABASE" value=":memory:"/>
1 like

Please or to participate in this conversation.