php - Laravel 黄昏 : how to use in-memory DB for testing

标签 php laravel laravel-5.5 laravel-dusk

我一直在尝试的是在使用 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/

相关文章:

php - Codeigniter : Why assign it to a variable? 中的 get_instance()

php - Messenger Bot 中的 hub_verify_index 和 hub_challenge 错误

javascript - 如何在 Laravel 中以不同方式比较日期和时间

javascript - 如何修复错误并在 Laravel/Vue 应用程序中正确使用 Vuetify

php - 如何从路由请求参数中删除现有项目? - 拉维尔 5.5

php - 我的数据未显示在phpmyadmin db中

php - PHP 的加权搜索算法

laravel - 有没有一种方法可以使用 Laravel 构建项目,但将核心文件与我的站点文件分开?

php - laravel action() 辅助方法中的欺骗请求方法?

javascript - 拉拉维尔 : How to get anchor tag value in variable and use this variable in the input field?