如何使用Laravel Dusk创建用于测试的.env文件

r1zk6ea1  于 2022-11-18  发布在  其他
关注(0)|答案(6)|浏览(199)

我正在使用Dusk做一个简单的登录测试。
我创建了一个.env. dash文件,以便测试使用备用数据库,并且不会删除在平台上注册的数据。
存档.env

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

存档.环境.黄昏

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

LoginTest.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');
        });
    }
}

但是,当我运行测试时,它不会更改数据库,而是删除应用程序中使用的数据库中的所有数据。
我怎样才能解决这个问题?

aelbi1ox

aelbi1ox1#

您必须在.env. dash文件名的末尾附加一个环境值(与您将初始化Dusk的环境相匹配)(例如- .env.dusk.local)。有关参考信息,请查看Dusk环境处理文档。

  • 更新 *:如果您的评论仍然有问题,请将以下内容放在testLogin函数的顶部,并报告它所显示的内容dd(env('APP_ENV'));
gojuced7

gojuced72#

@阿拉里克
我将.env.dusk.testing文件更改为.env.dusk.local
我运行了php artisan serve并在laravel_dash数据库中创建了一个新用户。
我再次运行php artisan serve,然后运行php artisan dusk以运行测试,并使用相同的电子邮件创建一个新用户,但在数据库laravel_dash_test中,它继续在laravel_dash中注册。

h5qlskok

h5qlskok3#

我建议不要使用mysql数据库,而是使用临时的sqlite数据库,因为它在测试过程中会被创建和销毁。
您必须在database.php中有一个sqilte config,它指向安装中的实际.sqlite文件
因此,将sqlite配置复制到database.php中,然后粘贴它,可以将其命名为sqlite_dusk,然后将数据库的位置设置为storage_path('dusk.sqlite')或类似的名称。然后在storage文件夹的根目录下创建一个空白的dusk.sqlite文件。
那么在你的.env.dusk集合中:

DB_CONNECTION=sqlite_dusk

希望这对你有帮助!

yiytaume

yiytaume4#

当我在dash文件中使用\App\User::truncate()时,也遇到了类似问题。
它截断了dev数据库而不是测试数据库。我不知道确切的原因,因为php工匠dazm在测试中用.env. dazm.local替换了.env文件。在.env. dazm.local中添加了整个DB的配置。
因此,首先,如果您的文件**.env**具有APP_ENV=local,则将dash文件重命名为.env.dusk.local
其次,在你的. env.dash.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
xsuvu9jc

xsuvu9jc5#

把你的黄昏之光传给拉瑞维尔·斯普尔:

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

mzsu5hc06#

php artisan会在开始时缓存数据,因此您必须在启动时通过以下方式将其定向到环境:

php artisan serve --env=dusk.local

相关问题