в предыдущем эпизоде мы видели, как настроить PHPUnit и протестировать домашнюю страницу блога может получить доступ, и одно сообщение может быть прочитано гостем
в этом эпизоде нам нужно показать комментарий к одному сообщению
во-первых, мы помним историю пользователя BDD и следуем этому контексту
//Дано сообщение//и в сообщении есть комментарии//затем я посещаю страницу с одним сообщением//Я должен увидеть комментарий
Создать тест
откройте PostTest и создайте новое имя теста test_guest_can_see_комментарий_ когда посетит_сингл_пост()
затем возьмите историю пользователя до и вставьте
public function test_guest_can_see_comment_when_visit_single_post(){
// Given a Post
// and Post have comments
// then I visit single post page
// I've see the comment
}
и мы заполняем код следующим образом
public function test_guest_can_see_comment_when_visit_single_post(){
// Given a Post
$post = factory('App\Post')->create();
// and Post have comments
$comment = factory('App\Comment')
->create(['post_id'=>$post->id]);
// then I visit single post page
$response = $this->get('blog/'.$post->id);
// I've see the comment
$response->assertSee($comment->body);
}
это должно потерпеть неудачу
Хорошо, когда мы полностью создадим спецификацию, тогда давайте заполним пробел.
не думай, что это сложно, нам нужно
- обновить представление для отображения комментарий
- создайте связь между сообщением и комментарием
Отображать комментарий
гото show.blade.php возьмите HTML-код, отобразите сообщение и вставьте ниже тот
мы создаем раздел комментариев
@foreach($post->comment as $comment)˛ @endforeach {{ $comment->body }}
мы зацикливаем $post->комментарий для получения объекта комментария и отображения тела комментария
попробуйте проверить
должен снова потерпеть неудачу, потому что мы не создаем отношения между моделью
откройте Публикацию модели и создайте комментарий функцию для связи с моделью комментариев
class Post extends Model
{
public function comment(){
return $this->hasMany(Comment::class);
}
}
затем все еще тест
да, у меня есть зеленая работа
и снова загляните в браузер
замечательно, что мы достигаем цели
Раздел бонусов
но комментарий не показывает все необходимые данные, например. (владелец ,дата создания)
добавить created_at
далее мы добавляем комментарий дата создания
{{ $comment->created_at }}
добавить к
сохранение и обновление браузера
Я изменил формат даты с помощью diffForHumans()
{{ $comment->created_at->diffForHumans() }}
и освежить
выглядеть намного лучше
Создатель отображаемых комментариев
теперь нам нужно отобразить создателя комментария, для этого мы будем использовать тест, чтобы убедиться, что у комментария есть создатель, используйте php artisan make:test CommentTest –unit
используйте единицу измерения, потому что этот тест в малом масштабе не использует другой класс
файл должен появиться в тесте/блоке
откройте это и заполните тестовую функцию, а также запомните историю пользователя
public function test_comment_should_has_creator()
{
// Giving comment object
// should include User object
}
затем заполните пробел
public function test_comment_should_has_creator()
{
// Giving comment object
$comment = factory('App\Comment')->create();
// should include User object
$this->assertInstanceOf('App\User',$comment->creator); // I expect creator function has User instance
}
и начинайте тест
Хм, не таблица пользователей, но у нас уже есть тот
эта ошибка возникла из-за того, что мы не используем Обновить базу данных признак
Обновить базу данных
попробуйте проверить еще раз
Хорошо, ошибка, это имеет смысл. Мы не устанавливаем отношения к пользовательской модели
гото app/comment.php заполните эту функцию
public function creator(){
return $this->BelongsTo(User::class,'user_id');
}
как это
сохранить и протестировать
хорошо, получил зеленый это пропуск.
теперь мы можем отобразить создателя комментария в одном посте
Я должен заполнить
{{ $comment->creator->name }} comment since
и попробуйте сначала проверить это должен потерпеть неудачу
сохраните и перейдите в браузер
это работа
Резюмировать
в этом посте мы рассмотрели, как добавить комментарий к сообщению с помощью TDD и добавить некоторые функции, чтобы комментарий выглядел красиво
если вам это нравится, пожалуйста, дайте мне 50 хлопков и нажмите следовать этому ободрению, чтобы двигаться вперед
это |/фиксация проекта на Github и ты можешь сыграть в нем главную роль
Оригинал: “https://dev.to/kris/building-advance-blog-on-laravel-55-with-tdd-mode-3-post-has-comment-6an”