Home > Blockchain >  Can't connect to database while testing
Can't connect to database while testing

Time:08-24

If I make request through POSTMAN, record is created in my main database api. I want to execute tests in database called api_test. When I run the test

Testing [critical] Error thrown while running command "doctrine:database:drop --connection=test --force=1 --if-exists=1". Message: "An exception occurred in the driver: SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known"

This is absolute nonsense for me. My test url is same like my production one with only database name changed

.env
    DATABASE_URL="mysql://root:toma123@database:3306/api?serverVersion=5.7&charset=utf8mb4"
    DATABASE_TEST_URL="mysql://root:toma123@database:3306/api_test?serverVersion=5.7&charset=utf8mb4"

In my doctrine.yaml I have

doctrine:
    dbal:
        default_connection: default
        connections:
            default:
                url: '%env(resolve:DATABASE_URL)%'
    orm:
        auto_generate_proxy_classes: true
        naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware
        auto_mapping: true
        mappings:
            App:
                is_bundle: false
                dir: '%kernel.project_dir%/src/Entity'
                prefix: 'App\Entity'
                alias: App

when@test:
    doctrine:
        dbal:
            connections:
                   test:
                        url: '%env(resolve:DATABASE_TEST_URL)%'

when@prod:
    doctrine:
        orm:
            auto_generate_proxy_classes: false
            query_cache_driver:
                type: pool
                pool: doctrine.system_cache_pool
            result_cache_driver:
                type: pool
                pool: doctrine.result_cache_pool

    framework:
        cache:
            pools:
                doctrine.result_cache_pool:
                    adapter: cache.app
                doctrine.system_cache_pool:
                    adapter: cache.system

AGAIN! Can create a record through postman with my default connection.

CodePudding user response:

The when@test section only takes effect when the environment matches the condition: test in this case.

Since you are not passing the -e argument, it's executing in the default environment, so the test connection doesn't exist.

Even if the environment matches, the connection is used by the orm mapping and the command you are using stills uses the default mapping (and connection).

Just rely on standard environment configuration: remove the when@test section, rename DATABASE_TEST_URL to DATABASE_URL and put it in the .env.test and execute the command bin/console d:d:d -e test --force.

  • Related