首页 > 解决方案 > 无法在 Laravel Dusk 中使用正确的环境数据库

问题描述

我正在尝试一个非常基本的测试。登录用户。它不起作用,因为它没有使用正确的数据库。

.env

APP_NAME=DEV
APP_ENV=local
APP_DEBUG=true
DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_PORT=5433
DB_DATABASE=db
DB_USERNAME=dbuser
DB_PASSWORD=****

.env.dusk.testing

APP_NAME=DUSK
APP_ENV=testing
APP_DEBUG=true
DB_CONNECTION=sqlite

phpunit.dusk.xml

...
    <php>
        <env name="APP_ENV" value="testing"/>
        <env name="DB_CONNECTION" value="sqlite"/>
        <env name="DB_DATABASE" value=":memory:"/>
    </php>
...

我还定义了如下sqlite连接:config/database.php

'sqlite' => [
    'driver' => 'sqlite',
    'database' => ':memory:',
    'prefix' => '',
],

我的测试使用 setup 方法清除用户并将其保存在数据库中。

namespace Tests\Browser;

use App\User;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Laravel\Dusk\Browser;
use Tests\DuskTestCase;

class ExampleTest extends DuskTestCase
{
    use DatabaseMigrations;

    protected $user;

    public function setUp(): void
    {
        parent::setUp();
        $this->user = factory(User::class)->create([
            'nombre' => 'John Doe',
            'email' => 'john.doe@testing.com',
            'password' => bcrypt('password')
        ]);
    }

    /** @test */
    public function guest_user_can_authenticate_with_valid_credentials()
    {
        $this->browse(function (Browser $browser) {
            $browser->assertGuest()
                    ->visit('/login')
                    ->type('@email', $this->user->email)
                    ->type('@password', 'password')
                    ->click('@login-button')
                    ->assertAuthenticatedAs($this->user)
                    ->assertUrlIs('/dashboard')
                    ->logout();
        });
    }
}

使用DatabaseMigrationstrait 会清除我的 PostgreSQL 数据库,而不是使用 SQLite 数据库。我尝试RefreshDatabase改用,但结果相同。我的环境数据库被清除了。

在这两种情况下,测试都失败了。用户被持久化到 SQLite 测试数据库中,但它仍在测试中查看另一个并在此过程中销毁它。

我非常接近完全放弃这个包和浏览器测试。没有什么简单的。文档很浅,它不能按预期工作。

标签: laravellaravel-dusklaravel-6

解决方案


我的问题由

  • 不使用内存中的 SQLite 数据库(我使用了.sqlite文件)。
  • 使用DatabaseMigrationstrait 而不是RefreshDatabase.
  • 运行黄昏时明确环境文件。php artisan dusk --env=dusk.testing.

推荐阅读