私は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:Unit test Route ::接頭辞付きグループ
しかし、グループとコントローラを追加すると、私のルートテストが失敗しないようには見えません。
は、ここに私のroutes/web.php
ファイルです:
<?php
Route::get('products', ['as' => 'products', function(){
return App\Product::all();
}]);
だ私のtests/Unit/ExampleTest.php
:Error: Call to undefined method Illuminate\Http\Response::assertResponseOk()
後:ちょうどこの基本的なセットアップ、私は私のテストを実行したとき、私はこの応答を取得して
<?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();
}
}
私はこれを読んで、このテストを再構成しました:
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()
メソッドコードを保つことを望んでいますが、それがもっとうまくいかない場合は、私が正常に動作する限り、問題ありません。あなたの助けと洞察力に感謝します!コメントパー
EDIT
、私は削除して、コマンド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製作者:コントローラProductController --resource'。 'Route :: resource()'が必要とするコントローラメソッドにはいくつかの機能がありません。 – Ohgodwhy