找不到 Dusk SQLite 数据库

Dusk SQLite database not found

我收到这个错误:

Database (homestead) does not exist.

当我尝试这个简单的 Dusk 测试时:

class ShowArticleTest extends DuskTestCase
{
    use DatabaseMigrations;

    /** @test */
    public function it_shows_all_articles()
    {
        Article::create([
            'title' => 'My First Article',
            'body'  => 'Some body text.'
        ]);

        $this->browse(function (Browser $browser) {
            $browser->visit('/articles')
                    ->assertSee('My First Article');
        });
    }
}

我可以在堆栈跟踪中看到错误来自处理 /articles 请求的控制器方法,它看起来像这样:

public function all()
{
    Article::all();
}

所以看起来数据库可以被测试本身访问,但不能被控制器访问。

.env.dusk.local 文件如下所示:

DB_CONNECTION=sqlite
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

正在我的项目根文件夹中创建 homestead 文件。该文件也在虚拟机中找到,权限如下所示:

-rw-rw-r-- 1 vagrant vagrant

尝试在 .env.dusk.local 中将 DATABASE 设置为 database/testing.sqlite。该文件是在 Dusk 启动后创建的,但错误仍然是找不到 database/testing.sqlite 数据库。

Database (database/testing.sqlite) does not exist.

可以使用 sqlite3 CLI 访问数据库文件,我可以毫无问题地查询记录。

我正在使用 Laravel 5.5 和 Homestead。

问题出现在config/database.php,附近:

'sqlite' => [
    'driver' => 'sqlite',
    'database' => env('DB_DATABASE', database_path('database.sqlite')),
    'prefix' => '',
]

因为 .env.dusk.local 中的 DB_DATABASE 定义为 homesteaddatabase.connections.sqlite.database 的配置值最终相同:homestead.

实际值应该是文件的完整路径,可以通过database_path()助手获取。因此,通过简单地将 database_path() 移出 env() 调用:

'database' => database_path(env('DB_DATABASE', 'database.sqlite'))

database.connections.sqlite.database 的值成为数据库文件的完整路径,一切似乎都正常。