当单元测试在laravel中失败时,响应不是视图消息

时间:2018-04-30 15:56:07

标签: php phpunit laravel-5.5

我是laravel 5.5单元测试的新手。

我在NewsController名称索引中编写了一个方法。它返回如下视图:

public function index(Request $request)
{
     $news = DB::table('news')->orderBy('created_at', 'desc')->get();
     $data['news'] = $news;
     return view('news.index')->with($data);
}

我为此写了一个测试,如下所示:

 public function testIndex(){
     factory(News::class, 10)->create();
    $news = DB::table('news')->orderBy('created_at', 'desc')->get();
    $this->get('/admin/news')
       ->assertViewHas('news', $news)
       ->assertStatus(200);
}

但测试失败了。消息是:

The response is not a view.

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

我怀疑你得到了一些不会被抛出的异常错误。可能会发生一些可能的事情。首先检查您的日志,看看是否有错误。如果没有,请尝试以下方法进行调试:

在您的路线中,您似乎无需根据文档使用/定义“新闻”。 https://laravel.com/docs/5.6/routing#route-group-prefixes

Route::group(['prefix' => 'admin', 'middleware' => 'auth:admin'] , function(){
    Route::get('news' , 'NewsController@index')->name('admin.news.index');
});

如果这不起作用,则将dd('here')放在索引函数的顶部,看看你的测试是否在那里。如果你没有到达那里,那么检查你的中间件。

如果你仍然到达那里,那么在你返回之前dd()你的观点。

dd(view('news.index')->with($data))

检查其中的数据是什么类型的对象。

最终你要做的是遵循正在执行什么代码的逻辑以及你要回来的内容。希望这能让你走上正轨。