我正在使用Dusk进行简单的登录测试。
我创建了一个.env.dusk文件,以便测试使用备用数据库,并且不会删除在平台上注册的数据。
存档.env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_dusk
DB_USERNAME=root
DB_PASSWORD=123456
存档.env.dusk
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_dusk_test
DB_USERNAME=root
DB_PASSWORD=123456
LoginTest.php
namespace Tests\Browser;
use Tests\DuskTestCase;
use Illuminate\Foundation\Testing\DatabaseMigrations;
class LoginTest extends DuskTestCase
{
use DatabaseMigrations;
/**
* A Dusk test example.
*
* @return void
*/
public function testLogin()
{
$user = factory(\App\User::class)->create(['email' => '[email protected]']);
$this->browse(function ($browser) use ($user) {
$browser->visit('/login')
->type('email', $user->email)
->type('password', 'secret')
->press('Login')
->assertPathIs('/home');
});
}
}
但是当我运行测试时,它不会更改数据库,它会删除应用程序中使用的数据库中的所有数据。
我怎么解决这个问题?
您必须附加一个环境值(与您将初始化Dusk的环境相匹配)到.env.dusk文件名的末尾(例如 - .env.dusk.local)。有关参考,请查看Dusk Environment Handling上的文档。
更新:如果您的评论仍然存在问题,请将以下内容放在testLogin函数的顶部并报告它的内容dd(env('APP_ENV'));
@alaric
我将.env.dusk.testing
文件更改为.env.dusk.local
我运行了php artisan serve
并在laravel_dusk数据库中创建了一个新用户。
我再次运行php artisan serve
然后php artisan dusk
运行测试并使用相同的电子邮件创建一个新用户但在数据库laravel_dusk_test中它继续在laravel_dusk中注册。
我建议使用临时sqlite数据库,而不是使用mysql数据库,因为它在测试期间被创建和销毁。
你必须在database.php中有一个sqlite配置,它指向你安装的实际.sqlite文件
所以复制sqlite
配置在database.php
,然后粘贴它,可能命名为sqlite_dusk
,然后为db的位置把它作为storage_path('dusk.sqlite')
或类似的东西。然后在dusk.sqlite
文件夹的根目录中创建一个空白的storage
文件。
然后在你的.env.dusk
集:
DB_CONNECTION=sqlite_dusk
希望有所帮助!
当我在我的黄昏文件中使用\ App \ User :: truncate()时,我有类似的问题。
它截断了dev数据库而不是测试数据库。我不确切知道为什么因为php artisan dusk用.env.dusk.local替换.env文件进行测试。在.env.dusk.local中添加数据库的整个配置为我完成了这项工作。
首先,如果您的文件.env有APP_ENV = local,请将您的黄昏文件重命名为.env.dusk.local
其次,在你的.env.dusk.local中一定要使用你的数据库的整个配置:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=tdd_test
DB_USERNAME=your_username
DB_PASSWORD=your_password
代替
DB_CONNECTION=test // configuration of test in the /config/database.php
然后运行你的测试
php arisan dusk