我是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.
任何人都可以帮助我吗?
答案 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))
检查其中的数据是什么类型的对象。
最终你要做的是遵循正在执行什么代码的逻辑以及你要回来的内容。希望这能让你走上正轨。