【问题标题】:Laravel Dusk: how to use in-memory DB for testingLaravel Dusk:如何使用内存数据库进行测试
【发布时间】:2018-07-18 08:31:05
【问题描述】:

我一直在尝试使用内存数据库,同时使用 Laravel Dusk 进行测试。

这里有一个文件.env.dusk.local,具有以下值。

DB_CONNECTION=sqlite
DB_DATABASE=:memory:

这是一个浏览器测试文件的sn-p。

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.

要强制 Dusk 在运行测试时使用自己的环境文件,请在项目的根目录中创建一个 .env.dusk.{environment} 文件。例如,如果您要从本地环境启动黄昏命令,您应该创建一个 .env.dusk.local 文件。

我不觉得 Dusk 正在访问单独的数据库。

我们将不胜感激。

【问题讨论】:

  • 我认为在 Dusk 中使用内存 SQLite 是不可能的。

标签: php laravel laravel-5.5 laravel-dusk


【解决方案1】:

在 Laravel 黄昏浏览器测试时,您不能使用 :memory: 数据库。您的开发服务器和黄昏测试在不同的进程上运行。灰尘测试无法访问在开发服务器上运行的进程的内存。

创建用于测试的 sqlite 文件数据库的最佳解决方案。

'sqlite_testing' => [
      'driver'   => 'sqlite',
      'database' => database_path('sqlite.testing.database'),
      'prefix'   => '',
 ],

在数据库文件夹中创建 sqlite.testing.database 文件。

确保在使用运行测试之前运行开发服务器

php artisan serve --env dusk.local

【讨论】:

    【解决方案2】:

    您需要config/database.php 中的连接

    'sqlite_testing' => [
         'driver'   => 'sqlite',
         'database' => ':memory:',
         'prefix'   => '',
    ],
    

    然后在您的phpunit.xml 文件中使用:

    <env name="DB_DEFAULT" value="sqlite_testing" />
    

    或在您的测试中使用:

     putenv('DB_DEFAULT=sqlite_testing');
    

    不要忘记在每次测试之前使用RefreshDatabase trait 来重置数据库。

    【讨论】:

      猜你喜欢
      • 2019-10-29
      • 1970-01-01
      • 2018-06-12
      • 1970-01-01
      • 1970-01-01
      • 2017-06-23
      • 2020-06-04
      • 2018-09-16
      • 2017-06-13
      相关资源
      最近更新 更多