Я пытаюсь создать простой тест phpunit для модели Note в моем приложении Laravel.Я просто хочу проверить, что запрос get к конкретному экземпляру заметки отобразит некоторые свойства этой заметки.
У меня есть модель, фабрика, контроллер и маршрут Note.
Модель
namespace App;
use Illuminate\Database\Eloquent\Model;
class Note extends Model
{
protected $guarded = [];
public function path()
{
return "/notes/{$this->id}";
}
}
Завод
use Faker\Generator as Faker;
$factory->define(App\Note::class, function (Faker $faker) {
return [
'title' => $faker->sentence,
'body' => $faker->paragraph,
];
});
Маршрут
Route::get('/notes/{note}', 'NotesController@show');
Контроллер
namespace App\Http\Controllers;
use App\Note;
use Illuminate\Http\Request;
class NotesController extends Controller
{
public function show(Note $note)
{
return view('notes.show', compact('note'));
}
}
Тест
namespace Tests\Feature;
use Tests\TestCase;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Foundation\Testing\RefreshDatabase;
class NotesTest extends TestCase
{
use WithFaker, RefreshDatabase;
/** @test */
public function a_user_can_view_a_note()
{
$this->withoutExceptionHandling();
$note = factory('App\Note')->create();
// dd($note->path());
$this->get($note->path())
->assertSee($note->title)
->assertSee($note->body);
}
}
Когда я запускаю тест a_user_can_view_a_note
, я получаю эту ошибку:
1) Тесты \ Feature \ NotesTest :: a_user_can_view_a_note Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException: GET http://shepherding.test/1
Вместо поиска http://shepherding.test/notes/1
, он ищет http://shepherding.test/1
.
PS: dd($note->path());
дает "/notes/1".
Я могу заменить $this->get($note->path())
на это:
$this->get('/notes/' . $note->id);
или даже заменить его жестко закодированнымзначение:
$this->get('/notes/1');
Но тест продолжает пытаться получить http://shepherding.test/1
.
Я не могу понять, почему /notes/
удаляется из запроса на получение.
У меня есть другие тесты для индекса и магазина, которые все работают нормально.Только этот показывает это поведение.