我是Laravel的新手,並且正在關注Pluralsight中的Play by Play: Getting Started with Laravel 5 with Steven Maguire視頻。這是在Vagrant中的lavarvel/laravel
盒子的乾淨安裝。 Laravel的版本是5.4.15,而PHPUnit的版本是5.7.16。Laravel:單元測試Route :: group,前綴爲
但是,我似乎無法讓我的路由測試不會因爲我添加組和控制器而失敗。
這是我的routes/web.php
文件:
<?php
Route::get('products', ['as' => 'products', function(){
return App\Product::all();
}]);
這裏是我的tests/Unit/ExampleTest.php
:
<?php
namespace Tests\Unit;
use Tests\TestCase;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;
use Illuminate\Http\Response;
class ExampleTest extends TestCase
{
/**
* A basic test example.
*
* @return void
*/
public function testBasicTest()
{
$this->assertTrue(true);
}
public function testProductsList(){
$this->get(route('products'))
->assertResponseOk();
}
}
通過如此基本的設置,當我運行我的測試中,我得到這樣的迴應:Error: Call to undefined method Illuminate\Http\Response::assertResponseOk()
後閱讀,我重構了這個測試:
public function testProductsList(){
$response = $this->get(route('products'));
$this->assertEquals(200, $response->status());
}
這個新結構成功了,所以我繼續使用視頻,接下來我們添加了一個路由組。以下是routes\web.php
文件中的路由組:
Route::group(['prefix' => 'api'], function(){
Route::get('products', ['as' => 'products', function(){
return App\Product::all();
}]);
});
這也成功了。當我將Route::resource
引入流程時,問題就開始了。測試開始失敗。這裏是新routes\web.php
文件:
Route::group(['prefix' => 'api'], function(){
Route::resource('products', 'ProductController', ['only' => ['index', 'store', 'update']]);
});
這裏的ProductController
類在這個文件app/Http/Controllers/ProductController.php
:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class ProductController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
}
}
我以前php artisan make:controller ProductController
創建此控制器。這裏是我現在收到的錯誤:InvalidArgumentException: Route [products] not defined.
我試圖將調整後的testProductsList()
方法更改回原始代碼,但它仍然不起作用。
有關我如何克服這些錯誤的任何見解?我寧願保留原始的testProductsList()
方法代碼,但是,如果這不是它的工作方式,那麼只要我能得到它的工作,我很好。預先感謝您的幫助和見解!
編輯
%的評論,我刪除並且使用命令php artisan make:controller ProductController --resource
重建了ProductController
類。我在文件app/Http/Controllers/ProductController.php
中編輯了上述內容以反映更改。但是,測試仍然失敗。與亞歷克斯的答案,我也改變了testProductsList
方法,但其中沒有任何變化:
public function testProductsList(){
/*
* I tried just `products` for the route
* and still receive the error.
*/
$this->get(route('api.products'));
$this->assertResponseOk();
}
任何其他的想法?
如果你打算使用'路線::資源()'你孃家使用' PHP工匠make:controller ProductController --resource'。 'Route :: resource()'需要的控制器方法中缺少了幾個函數。 – Ohgodwhy