QueryException:常规错误:1没有这样的表:{table_name}(SQL:从“ {table_name}”中选择*)

时间:2018-12-31 16:36:42

标签: php laravel laravel-5 phpunit phpunit-testing

  • Laravel版本:5.7
  • PHP版本:7.2
  • 数据库驱动程序:sqlite
  • 数据库:内存

所有在PHPUnit上的测试都可以正常工作。但是,当我在View::share中添加AppServiceProvider时,所有PHPUnit测试都失败了。

AppServiceProvider.php

class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        \View::share('categories', \App\Models\Category::all());
    }
}

错误

  

Illuminate \ Database \ QueryException:SQLSTATE [HY000]:常规错误:1没有这样的表:category(SQL:从“ categories”中选择*)

我已经在所有测试中使用了RefreshDatabase

请指导我,如何解决此问题。我应该在Laravel应用中的何处调用View::share,以便所有测试都可以通过。

1 个答案:

答案 0 :(得分:1)

之所以发生这种情况,是因为事实上该数据库甚至不存在,并且提供程序启动假定该数据库/表已启动并正在运行。

通过包装将其固定得更多

class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
       if(\Schema::hasTable('categories'){
        \View::share('categories', \App\Models\Category::all());
       }
    }
}