Dusk SQLite 数据库未找到

Cam*_*ilo 1 php sqlite laravel laravel-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');
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以在堆栈跟踪中看到错误来自处理请求的控制器方法/articles,如下所示:

public function all()
{
    Article::all();
}
Run Code Online (Sandbox Code Playgroud)

因此,测试本身似乎可以访问数据库,但控制器不能访问数据库。

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

DB_CONNECTION=sqlite
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
Run Code Online (Sandbox Code Playgroud)

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

-rw-rw-r-- 1个流浪者

尝试设置DATABASEdatabase/testing.sqlitein .env.dusk.local。Dusk 启动后会创建该文件,但错误仍然表明找不到数据库database/testing.sqlite

数据库(database/testing.sqlite)不存在。

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

我正在使用 Laravel 5.5 和 Homestead。

Cam*_*ilo 5

问题出现在内部config/database.php,在这里附近:

'sqlite' => [
    'driver' => 'sqlite',
    'database' => env('DB_DATABASE', database_path('database.sqlite')),
    'prefix' => '',
]
Run Code Online (Sandbox Code Playgroud)

因为DB_DATABASEinside.env.dusk.local被定义为homestead,所以最终的配置值database.connections.sqlite.database是一样的:homestead

实际值应该是文件的完整路径,可以通过database_path()帮助程序获取。因此,只需退出database_path()通话即可env()

'database' => database_path(env('DB_DATABASE', 'database.sqlite'))
Run Code Online (Sandbox Code Playgroud)

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