【问题标题】:PHPUnit in Laravel error : Exception' with message 'SQLSTATE[HY000] [2005] Unknown MySQL server host 'mysql' (2)'Laravel 中的 PHPUnit 错误:带有消息“SQLSTATE [HY000] [2005] 未知 MySQL 服务器主机 'mysql' (2)”的异常'
【发布时间】:2016-10-28 16:49:30
【问题描述】:

我正在尝试在 Laravel 5 中为 visit('/') 运行 PHPunit 测试,但失败并显示以下消息: (我的应用在 docker 容器 http://www.spiralout.eu/2015/12/dockervel-laravel-development.html 中运行)

    class MyTest extends TestCase
{
    /**
     * A basic test example.
     *
     * @return void
     */
    public function testExample()
    {
        $this->assertTrue(true);
    }


        public function providerAllUrisWithResponseCode()
    {
        return [
            ['/', 200],
            ['/thank', 200],
            ['/non-existing', 404],
        ];
    }

        public function testDisplayThankYou($value='')
    {
        $this->visit('/thankyou')
        ->see('Thank you!');
    }       


        public function testPageControllerGet()
    {
        $this->call('GET', '/');
    }
        public function testDisplayWelcome($value='')
    {
        $this->visit('/')
        ->see('Welcome');

    }
}

收到此错误

        $vendor/bin/phpunit 
PHPUnit 4.8.26 by Sebastian Bergmann and contributors.

...F

Time: 24.01 seconds, Memory: 16.00MB

There was 1 failure:

1) MyTest::testDisplayWelcome

A request to [http://localhost] failed. Received status code [500].

    ..vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithPages.php:196

    ..vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithPages.php:80
    ..vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithPages.php:61
    .../www/tests/ExampleTest.php:16

    Caused by
    exception 'PDOException' with message 'SQLSTATE[HY000] [2005] Unknown MySQL server host 'mysql' (2)' 
    in ../vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:55

我的行为特征通过了! 我的 .env.* 文件看起来像:

.env
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

.env.behat
DB_CONNECTION=mysql
DB_HOST=127.0.0.1 
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

另外:如果我删除或更改 .env.behat 中的 DB_HOST=127.0.0.1 并运行 behat,它会返回错误!

Connector.php 中的第 50 行说:

   public function createConnection($dsn, array $config, array $options)
    {
**here it breaks**-->   $username = Arr::get($config, 'username');

        $password = Arr::get($config, 'password');

        try {
            $pdo = new PDO($dsn, $username, $password, $options);
        } catch (Exception $e) {
            $pdo = $this->tryAgainIfCausedByLostConnection(
                $e, $dsn, $username, $password, $options
            );
        }

        return $pdo;
    }

例如,当我运行 DB ::table('something')->get();它工作正常。

有人发现问题了吗?

【问题讨论】:

  • 好像是环境配置问题,测试环境中DB_HOST必须设置为mysql
  • 如果 .env 中的 DB_HOST 设置为 localhost 而不是 mysql 怎么办?
  • @Devon 是我的测试环境,和 Laravel 应用程序一样。环境?
  • @ishadif 我的 Laravel 应用在 dockervel(docker 容器)spiralout.eu/2015/12/dockervel-laravel-development.html 中运行,我需要设置 DB_HOST=mysql。

标签: php mysql laravel-5 phpunit


【解决方案1】:

.env.behat 上,您应该使用mysql 作为主机名。它通过 docker 链接,名称不是 127.0.0.1。
.env.behat DB_CONNECTION=mysql DB_HOST=mysql DB_PORT=3306 DB_DATABASE=homestead DB_USERNAME=homestead DB_PASSWORD=secret

【讨论】:

猜你喜欢
  • 2015-02-04
  • 1970-01-01
  • 2016-11-01
  • 2014-10-28
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
  • 2012-07-08
相关资源
最近更新 更多