【问题标题】:Laravel 5 : Use different database for testing and localLaravel 5:使用不同的数据库进行测试和本地
【发布时间】:2016-05-15 14:41:00
【问题描述】:

如何在不每次编辑.env文件的情况下,在本地系统上更改数据库进行开发和测试?

因此,我发现练习 TDD 很不方便。

Laravel 应用程序是否可以区分正常的开发和测试,以便选择合适的数据库?

【问题讨论】:

  • 这正是 .env 文件的用途。您只需保留几个文件,将一个放在实时服务器上,然后为开发选择您需要的 env 文件。

标签: php laravel


【解决方案1】:

在 Laravel 中创建测试数据库配置

编辑config\database.php 文件并将testing - 数组添加到connections 数组中:

'connections' => [
    'testing' => [
        'driver' => env('DB_TEST_DRIVER'),
        // more details on your testing database
    ]
]

然后将必要的变量添加到您的.env-文件中。

编辑 PHPUnit 配置

打开您的phpunit.xml-文件并在您的<php>-tag 中添加以下内容:

<env name="DB_CONNECTION" value="testing"/>

现在 PHPUnit 将在您在 testing - 数组中定义的数据库上运行测试。

【讨论】:

  • 谢谢,非常感谢,我不必编辑config\database.php。我所要做的就是从phpunit.xml 设置DB_CONNECTION 环境变量,这是您解决方案的后期部分。所以我现在拥有的是我的 phpunit.xml 中的<php><env name="DB_CONNECTION" value="sqlite"></env></php>
  • 您不能添加... DB_CONNECTION=测试 DB_HOST=127.0.0.1 DB_PORT=测试数据库端口 DB_DATABASE=测试数据库名称 DB_USERNAME=测试数据库用户 DB_PASSWORD=测试数据库密码...到 . env 文件并运行 php artisan config:cache
【解决方案2】:

您可以为每种类型的测试使用不同的 .env 文件。您可以像这样修改您的 tests/functional.suite.yml 和 tests/unit.suite.yml :

class_name: FunctionalTester
modules:
    enabled: [Laravel5, FunctionalHelper, Asserts]
    config:
        Laravel5:
            environment_file: .env.testing

还有这个:

class_name: UnitTester
modules:
    enabled: [Asserts, UnitHelper, Laravel5]
    config:
        Laravel5:
            environment_file: .env.unittesting

或者您可以简单地修改您的 phpunit.xml 并像上面的 @Tijmen 那样添加环境变量。

【讨论】:

    【解决方案3】:

    如果您的测试数据库使用相同的配置但只是名称不同,则只需通过添加更改选定的数据库名称就足够了

    <env name="DB_DATABASE" value="testing_db_name"/>
    

    &lt;php&gt;节点中的文件phpunit.xml

    【讨论】:

      【解决方案4】:

      对于 Laravel 5.5,正确的做法是创建一个名为 .env.testing 的测试环境文件。在这里,您可以定义您的测试环境,包括您要用于测试的数据库...

      DB_CONNECTION=mysql
      DB_HOST=127.0.0.1
      DB_PORT=3306
      DB_DATABASE=test DB
      DB_USERNAME=test DB user
      DB_PASSWORD=test DB password
      

      然后运行这个命令...

      php artisan config:cache --env=testing
      

      这会将缓存配置为 .env.testing 文件参数。

      Here 是文档的链接。

      【讨论】:

      • 在我跑之前没有用... php artisan config:cache --env=testing
      • 您已经在运行命令之前创建了一个 .env.testing 文件。我会推荐获胜的答案。这种方法真的应该用于在开发和生产之间切换。在 .env 文件中,您可以定义您的测试服务器凭据,我个人认为这是一种更好的方法。
      • 如何切换回默认环境?
      • 要切换回 .env 参数运行 php artisan config:cache 不带 '--env=' 部分。
      • 我做了一个bash脚本,进入测试环境,运行测试,然后再次进入正常环境,这样我发现它更容易。泰
      【解决方案5】:

      如果您的单元测试之一需要特定数据库,请在单元测试开始时添加此代码

          $connections                                    = config('database.connections');
          $connections['single_test_database_connection'] = [
              'driver'      => 'mysql',
              'host'        => env('DB_HOST', '127.0.0.1'),
              'port'        => env('DB_PORT', '3306'),
              'database'    => 'single_test_database',
              'username'    => env('DB_USERNAME', 'forge'),
              'password'    => env('DB_PASSWORD', ''),
              'unix_socket' => env('DB_SOCKET', ''),
              'charset'     => 'utf8mb4',
              'collation'   => 'utf8mb4_unicode_ci',
              'prefix'      => '',
              'strict'      => true,
              'engine'      => null,
          ];
          config()->set('database.connections', $connections);
          config()->set('database.default', 'single_test_database_connection');
      

      【讨论】:

        【解决方案6】:

        对于那些想要使用 sqlite 进行测试的人

        创建测试环境文件和test.sqlite文件

        > cp .env .env.testing
        > touch test.sqlite
        

        在 .env.testing 文件中

        DB_CONNECTION=sqlite
        DB_DATABASE=./test.sqlite
        

        紧随其后

        php artisan config:cache --env=testing
        

        现在再次迁移您的数据库

        php artisan migrate
        

        如果你需要,那就播种

        php artisan db:seed
        

        无论何时你想使用本地环境,运行

        php artisan config:cache --env=local
        

        请注意,环境名称可以在 .env 文件中找到为 APP_ENV=local

        【讨论】:

          猜你喜欢
          • 2017-04-02
          • 2019-08-05
          • 1970-01-01
          • 2020-06-19
          • 2018-09-12
          • 2015-05-07
          • 2014-12-19
          • 1970-01-01
          • 2022-08-02
          相关资源
          最近更新 更多