找不到黄昏SQLite数据库

时间:2018-02-15 23:49:23

标签: php laravel sqlite 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');
        });
    }
}

我可以在堆栈跟踪中看到错误来自处理/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个流浪汉流浪汉

DATABASE中尝试将database/testing.sqlite设置为.env.dusk.local。黄昏开始后会创建该文件,但错误仍然表示无法找到database/testing.sqlite数据库。

  

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

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

我正在使用Laravel 5.5和Homestead。

1 个答案:

答案 0 :(得分:4)

问题发生在config/database.php内,在这附近:

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

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

实际值应该是文件的完整路径,可以使用database_path()帮助程序获取。因此,通过简单地移动database_path()来调用env()

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

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