Рубрики
Uncategorized

Создание продвинутого блога на Laravel 5.5 с режимом TDD #3 Пост содержит комментарий

в предыдущем эпизоде мы видели, как настроить PHPUnit и протестировать доступ к домашней странице блога и к одному pos… С тегами web dev, php, laravel, laravel 5.

в предыдущем эпизоде мы видели, как настроить 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)
{{ $comment->body }}
˛ @endforeach

мы зацикливаем $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”