laravel - 无法在 Laravel Dusk 中使用正确的环境数据库
问题描述
- 我有两个环境文件:
.env
和.env.dusk.testing
(因为.env
如果我不明确使用环境处理程序,则会不断被覆盖)。 - 我有两个开发服务器:
8080
一个使用.env
(使用命令php artisan serve --port=8080
)的端口8000
一个使用.env.dusk.testing
(使用命令php artisan serve --env=dusk.testing
)的端口
我正在尝试一个非常基本的测试。登录用户。它不起作用,因为它没有使用正确的数据库。
.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();
});
}
}
使用DatabaseMigrations
trait 会清除我的 PostgreSQL 数据库,而不是使用 SQLite 数据库。我尝试RefreshDatabase
改用,但结果相同。我的环境数据库被清除了。
在这两种情况下,测试都失败了。用户被持久化到 SQLite 测试数据库中,但它仍在测试中查看另一个并在此过程中销毁它。
我非常接近完全放弃这个包和浏览器测试。没有什么简单的。文档很浅,它不能按预期工作。
解决方案
我的问题由
- 不使用内存中的 SQLite 数据库(我使用了
.sqlite
文件)。 - 使用
DatabaseMigrations
trait 而不是RefreshDatabase
. - 运行黄昏时明确环境文件。
php artisan dusk --env=dusk.testing
.
推荐阅读
- intellij-idea - 在本地编辑远程文件并将它们提交到 intellijea IDEA
- python - 将熊猫数据框中的行相乘
- mysql - 如何选择总和达到1000的行?
- excel - SUMIFS 语句在应用条件中的数字字段之前一直有效,然后它会失败
- c# - 工作单元和依赖注入
- vb6 - 我怎么知道我从 MsgBox 得到的输入?
- node.js - PEM 例程:PEM_read_bio:no start line - 无法解码 JWT 令牌
- windows - Windows Powershell 中的 mklink 是什么?
- elasticsearch - Kibana Lucene 日期范围
- python - 根据不同的表有效地复制数据帧行