7

我正在使用 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');
        });
    }
}

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

我怎么解决这个问题?

4

5 回答 5

6

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

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

于 2017-03-27T12:49:54.457 回答
2

@alaric

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

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

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

于 2017-03-27T13:23:57.570 回答
0

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

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

所以复制sqlite配置database.php然后粘贴它,sqlite_dusk也许命名它,然后为数据库的位置把它作为storage_path('dusk.sqlite')或类似的东西。dusk.sqlite然后在文件夹的根目录中创建一个空白文件storage

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

DB_CONNECTION=sqlite_dusk

希望有帮助!

于 2017-03-29T19:19:10.650 回答
0

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

-- php artisan serve --env=dusk.local
于 2020-12-23T23:03:56.860 回答
0

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

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

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

其次,在您的 .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
于 2019-04-30T10:55:51.420 回答