【问题标题】:How to create .env file for test with Laravel Dusk如何使用 Laravel Dusk 创建 .env 文件进行测试
【发布时间】:2017-03-27 12:40:13
【问题描述】:

我正在使用 Dusk 做一个简单的登录测试。

我创建了一个 .env.dusk 文件,以便测试使用备用数据库并且不会删除平台上注册的数据。

存档 .env

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_dusk
DB_USERNAME=root
DB_PASSWORD=123456

存档 .env.dusk

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_dusk_test
DB_USERNAME=root
DB_PASSWORD=123456

登录测试.php

namespace Tests\Browser;

use Tests\DuskTestCase;
use Illuminate\Foundation\Testing\DatabaseMigrations;

class LoginTest extends DuskTestCase
{
    use DatabaseMigrations;
    /**
     * A Dusk test example.
     *
     * @return void
     */
    public function testLogin()
    {
        $user = factory(\App\User::class)->create(['email' => 'example@example.com']);

        $this->browse(function ($browser) use ($user) {
            $browser->visit('/login')
                    ->type('email', $user->email)
                    ->type('password', 'secret')
                    ->press('Login')
                    ->assertPathIs('/home');
        });
    }
}

但是当我运行测试时,它不会更改数据库,它会从应用程序中使用的数据库中删除所有数据。

我该如何解决这个问题?

【问题讨论】:

    标签: php laravel laravel-5 environment laravel-dusk


    【解决方案1】:

    您必须在 .env.dusk 文件名的末尾附加一个环境值(与您将在其中初始化 Dusk 的环境相匹配)(例如 - .env.dusk.local)。如需参考,请查看Dusk Environment Handling 上的文档。

    更新:如果您的 cmets 仍然存在问题,请将以下内容放在您的 testLogin 函数的顶部并报告其内容dd(env('APP_ENV'));

    【讨论】:

    • 将env.dusk.testing文件名改为env.dusk.local
    【解决方案2】:

    @alaric

    我将.env.dusk.testing文件更改为.env.dusk.local

    我运行 php artisan serve 并在 laravel_dusk 数据库中创建了一个新用户。

    我再次运行php artisan serve,然后运行php artisan dusk 运行测试并使用相同的电子邮件创建一个新用户,但在数据库 laravel_dusk_test 中,它继续在 laravel_dusk 中注册。

    【讨论】:

      【解决方案3】:

      我建议不要使用 mysql 数据库,而是使用临时 sqlite 数据库,因为它会在测试期间创建和销毁。

      你必须在你的 database.php 中有一个 sqilte 配置,它指向你安装中的一个实际的 .sqlite 文件

      所以将sqlite 配置复制到database.php 中,然后将其粘贴,可能将其命名为sqlite_dusk,然后将数据库的位置设置为storage_path('dusk.sqlite') 或类似名称。然后在 storage 文件夹的根目录中创建一个空白的 dusk.sqlite 文件。

      然后在你的.env.dusk 集合中:

      DB_CONNECTION=sqlite_dusk
      

      希望有帮助!

      【讨论】:

        【解决方案4】:

        我在黄昏文件中使用 \App\User::truncate() 时遇到了类似的问题。

        它会截断开发数据库而不是测试数据库。我不知道为什么,因为 php artisan黄昏 用 .env.dusk.local 替换 .env 文件进行测试。在 .env.dusk.local 中添加数据库的整个配置为我完成了这项工作。

        首先,如果您的文件 .env 有 APP_ENV=local 然后将你的黄昏文件重命名为 .env.dusk。local

        其次,在你的 .env.dusk.local 中确保使用你的数据库的整个配置:

        DB_CONNECTION=mysql
        DB_HOST=127.0.0.1
        DB_PORT=3306
        DB_DATABASE=tdd_test
        DB_USERNAME=your_username
        DB_PASSWORD=your_password
        

        而不是

        DB_CONNECTION=test // configuration of test in the /config/database.php
        

        然后运行你的测试

        php arisan dusk
        

        【讨论】:

          【解决方案5】:

          将你的黄昏环境传递给 laravel 服务:

          -- php artisan serve --env=dusk.local
          

          【讨论】:

          • 除了 Lucas Lopes 非常相似但更广泛解释的答案之外,还有什么额外的见解?请突出区别,说明它的作用并指出它所获得的优势。
          猜你喜欢
          • 2018-07-18
          • 1970-01-01
          • 1970-01-01
          • 2018-10-19
          • 1970-01-01
          • 2017-03-31
          • 2019-12-22
          • 2019-08-11
          • 2019-10-29
          相关资源
          最近更新 更多