使用phpunit.xml,.env.dusk.local和sqlite内存数据库在Dusk中设置Laravel 5.4

时间:2017-01-28 09:15:32

标签: laravel sqlite phpunit laravel-5.4 laravel-dusk

标题说明了一切。我想知道如何使用内存中的SQLite数据库正确地使用Dusk建立一个新的Laravel 5.4项目。

我可以运行测试,但是我收到一个错误:“没有这样的表:用户”

  • 我创建了一个新的Laravel 5.4项目
  • 已安装黄昏并添加了服务提供商
  • 我正在使用测试身份验证的laravel docs中的测试。它已包含DatabaseMigrations特征
  • 我可以运行测试,第一个可以运行(导航到/ login路由),但第二个尝试登录失败。

我添加了一个包含

.env.dusk.local
APP_ENV=local
APP_KEY=RANDOM_STRING_HERE
APP_DEBUG=true
APP_LOG_LEVEL=debug
APP_URL=http://laravel54.dev

DB_CONNECTION=sqlite
DB_DATABASE=':memory:' // I've also tried just :memory: and also adding these details to the config/database.php file but to no avail

这是我正在运行的测试(直接来自the docs

<?php

namespace Tests\Browser;

use App\User;
use Tests\DuskTestCase;
use Laravel\Dusk\Chrome;
use Illuminate\Foundation\Testing\DatabaseMigrations;

class LoginTest extends DuskTestCase
{
    use DatabaseMigrations;

    public function test_login_page()
    {
        $user = factory(User::class)->create();

        $this->browse(function ($browser) use ($user) {
            $browser->visit('/login')
                ->type('email', $user->email)
                ->type('password', 'secret')
                ->press('Sign in')
                ->assertPathIs('/home');
        });
    }
}

我错过了什么?

1 个答案:

答案 0 :(得分:4)

你不能

需要注意的重要一点是,对于这种端到端测试,Dusk将无法控制环境,因为它将打开一个单独的过程。内存中的SQLite只存在于Dusk进程下,实际浏览器命中应用程序时不会知道Dusk创建的数据库,因此无法在数据库中声明任何内容。

https://github.com/laravel/dusk/issues/110

https://github.com/laravel/dusk/issues/73