我正在使用Dusk做一个简单的登录测试。
我创建了一个.env. dash文件,以便测试使用备用数据库,并且不会删除在平台上注册的数据。
存档.env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_dusk
DB_USERNAME=root
DB_PASSWORD=123456
存档.环境.黄昏
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' => 'example@example.com']);
$this->browse(function ($browser) use ($user) {
$browser->visit('/login')
->type('email', $user->email)
->type('password', 'secret')
->press('Login')
->assertPathIs('/home');
});
}
}
但是,当我运行测试时,它不会更改数据库,而是删除应用程序中使用的数据库中的所有数据。
我怎样才能解决这个问题?
6条答案
按热度按时间aelbi1ox1#
您必须在.env. dash文件名的末尾附加一个环境值(与您将初始化Dusk的环境相匹配)(例如- .env.dusk.local)。有关参考信息,请查看Dusk环境处理文档。
dd(env('APP_ENV'));
gojuced72#
@阿拉里克
我将
.env.dusk.testing
文件更改为.env.dusk.local
我运行了
php artisan serve
并在laravel_dash数据库中创建了一个新用户。我再次运行
php artisan serve
,然后运行php artisan dusk
以运行测试,并使用相同的电子邮件创建一个新用户,但在数据库laravel_dash_test中,它继续在laravel_dash中注册。h5qlskok3#
我建议不要使用mysql数据库,而是使用临时的sqlite数据库,因为它在测试过程中会被创建和销毁。
您必须在database.php中有一个sqilte config,它指向安装中的实际.sqlite文件
因此,将
sqlite
配置复制到database.php
中,然后粘贴它,可以将其命名为sqlite_dusk
,然后将数据库的位置设置为storage_path('dusk.sqlite')
或类似的名称。然后在storage
文件夹的根目录下创建一个空白的dusk.sqlite
文件。那么在你的
.env.dusk
集合中:希望这对你有帮助!
yiytaume4#
当我在dash文件中使用\App\User::truncate()时,也遇到了类似问题。
它截断了dev数据库而不是测试数据库。我不知道确切的原因,因为php工匠dazm在测试中用.env. dazm.local替换了.env文件。在.env. dazm.local中添加了整个DB的配置。
因此,首先,如果您的文件**.env**具有APP_ENV=local,则将dash文件重命名为.env.dusk.local
其次,在你的. env.dash.local中,一定要使用你的数据库的整个配置:
代替
然后使用
xsuvu9jc5#
把你的黄昏之光传给拉瑞维尔·斯普尔:
mzsu5hc06#
php artisan会在开始时缓存数据,因此您必须在启动时通过以下方式将其定向到环境: