无法对Laravel Dusk使用正确的环境数据库 我有两个环境文件:.env和.env.dash.testing(因为如果我没有明确使用环境处理程序,.env会不断被覆盖) 我有两个开发服务器: 端口8080中的一个,使用.env(使用命令php artisan-serve--port=8080) 端口8000中的一个,使用.env.dash.testing(使用命令php artisan-serve--env=dash.testing)

无法对Laravel Dusk使用正确的环境数据库 我有两个环境文件:.env和.env.dash.testing(因为如果我没有明确使用环境处理程序,.env会不断被覆盖) 我有两个开发服务器: 端口8080中的一个,使用.env(使用命令php artisan-serve--port=8080) 端口8000中的一个,使用.env.dash.testing(使用命令php artisan-serve--env=dash.testing),laravel,laravel-dusk,laravel-6,Laravel,Laravel Dusk,Laravel 6,我正在做一个非常基本的测试。登录用户。它不工作,因为它没有使用正确的数据库 .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.dash.testing APP_NAME=DUSK APP_ENV=testing APP_DEBUG=true

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

.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.dash.testing

APP_NAME=DUSK
APP_ENV=testing
APP_DEBUG=true
DB_CONNECTION=sqlite
phpunit.dash.xml

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

“sqlite”=>[
“驱动程序”=>“sqlite”,
'数据库'=>':内存:',
'前缀'=>'',
],
我的测试使用设置方法擦除用户并将其保存在数据库中

名称空间测试\浏览器;
使用App\User;
使用Illumb\Foundation\Testing\DatabaseMigrations;
使用Laravel\黄昏\浏览器;
使用Tests\testcase;
类ExampleTest扩展了TestCase
{
使用数据库迁移;
受保护的$用户;
公用函数设置():无效
{
父::设置();
$this->user=factory(user::class)->create([
“nombre”=>“John Doe”,
“电子邮件”=>“约翰。doe@testing.com',
'password'=>bcrypt('password')
]);
}
/**@测试*/
公共功能来宾用户可以使用有效凭据进行身份验证()
{
$this->browse(功能(浏览器$Browser){
$browser->assertGuest()
->访问(“/login”)
->键入(“@email”,$this->user->email)
->类型(“@password”、“password”)
->单击(“@登录按钮”)
->assertAuthenticatedAs($this->user)
->assertUrlIs(“/仪表板”)
->注销();
});
}
}
使用
DatabaseMigrations
trait将清除我的PostgreSQL数据库,而不是使用SQLite数据库。我尝试使用
刷新数据库
,但结果相同。我的环境数据库被删除了

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

我差一点就要放弃这个软件包和浏览器测试了。这一点都不简单。文档很肤浅,无法按预期工作。

我的问题已由

  • 不使用内存中的SQLite数据库(我使用了
    .SQLite
    文件)
  • 使用
    DatabaseMigrations
    特性而不是
    RefreshDatabase
  • 在运行dusk时明确说明环境文件<代码>php artisan Dash--env=dash.testing

我认为问题的复杂性在于两台服务器的运行。Dash怎么知道该用哪一个呢?我也这么认为,但Dash只是默认值(127.0.0.1:8000)。两台服务器都在运行或只有一台服务器在运行不是一个因素。如果您制作的页面只是从env打印出
APP\u NAME
,它是否确认使用了正确的设置?例如,当运行迁移时,它是否也确认了正确的设置?它没有。结果是环境文件没有被使用。如果我试图创建一个
.env.dash
文件,测试套件会在覆盖它之前使用原始的
.env
文件运行。我必须显式地使用
--env
参数运行
php artisan dusk
,以最终使其工作。