- 我有两个环境文件:
.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 测试数据库中,但它仍在测试中查看另一个并在此过程中销毁它。
我非常接近完全放弃这个包和浏览器测试。没有什么简单的。文档很浅,它不能按预期工作。