Я пытаюсь создать простой тест phpunit для модели Note в моем приложении Laravel. Я просто хочу проверить, что запрос на получение определенного экземпляра заметки будет отображать некоторые свойства этой заметки.
У меня есть модель 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) Tests\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/
удаляется из запроса на получение.
У меня есть другие тесты для индекса и хранилища, которые работают нормально. Только этот показывает такое поведение.