无法在 Laravel Dusk 中使用正确的环境数据库

Cannot use right environment database with 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>
...

我还在 config/database.php 中定义了 sqlite 连接,如下所示:

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

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

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

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

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

我几乎要完全放弃这个包和浏览器测试了。这一点都不简单。文档很浅,无法按预期工作。

我的问题已被

解决
  • 没有使用 in-memory SQLite 数据库(我使用了 .sqlite 文件)。
  • 使用 DatabaseMigrations 特征而不是 RefreshDatabase
  • 在 运行 dusk 时明确环境文件。 php artisan dusk --env=dusk.testing.