如何使用Laravel Dusk创建.env文件进行测试

时间:2017-03-27 12:40:13

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

我正在使用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

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

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

我该如何解决这个问题?

5 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

@alaric

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

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

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

答案 2 :(得分:0)

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

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

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

然后在.env.dusk集中:

DB_CONNECTION=sqlite_dusk

希望有所帮助!

答案 3 :(得分:0)

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

它会截断开发数据库而不是测试数据库。我不完全知道为什么,因为php artisan dusk将.env文件替换为.env.dusk.local进行测试。在.env.dusk.local中添加数据库的整个配置对我来说很有效。

因此,首先,如果您的文件 .env 具有APP_ENV = 本地 然后将您的黄昏文件重命名为.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

答案 4 :(得分:0)

将您的黄昏环境传递给 Laravel 服务:

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