我一直在尝试的是在使用 Laravel Dusk 进行测试时使用内存数据库。
这里我们有一个文件,.env.dusk.local
,具有以下值。
DB_CONNECTION=sqlite
DB_DATABASE=:memory:
这是浏览器测试文件的片段。
class ViewOrderTest extends DuskTestCase
{
use DatabaseMigrations;
/** @test */
public function user_can_view_their_order()
{
$order = factory(Order::class)->create();
$this->browse(function (Browser $browser) use ($order) {
$browser->visit('/orders/' . $order->id);
$browser->assertSee('Order ABC'); //Order name
});
}
}
当php artisan dusk
被执行时,Dusk开始浏览器测试。
但是,Dusk 似乎正在访问我的本地数据库,因为测试浏览器上有一个订单名称只存在于我的本地数据库中,而“订单 ABC”预计会显示在浏览器上。
根据文档,Laravel Dusk 允许我们设置 the environmental variables.
To force Dusk to use its own environment file when running tests, create a .env.dusk.{environment} file in the root of your project. For example, if you will be initiating the dusk command from your local environment, you should create a .env.dusk.local file.
我不觉得 Dusk 正在访问单独的数据库。
任何建议将不胜感激。
最佳答案
在 Laravel dusk 浏览器测试时,你不能使用 :memory:
数据库。您的开发服务器和黄昏测试在不同的进程上运行。灰尘测试无法访问在开发服务器上运行的进程的内存。
创建用于测试的 sqlite 文件数据库的最佳解决方案。
'sqlite_testing' => [
'driver' => 'sqlite',
'database' => database_path('sqlite.testing.database'),
'prefix' => '',
],
在数据库文件夹中创建 sqlite.testing.database 文件。
确保在使用
运行测试之前运行开发服务器php artisan serve --env dusk.local
关于php - Laravel 黄昏 : how to use in-memory DB for testing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48674168/