(LikesController # create) ожидал, что #count изменился на 1, но был изменен на 0, пожалуйста, подскажите мне подсказку - PullRequest
0 голосов
/ 28 декабря 2018

Я бигинер.Я изучал Rspec.

Я сделал реализацию, которая позволила мне делать хорошие посты.

Но в браузере я делаю ожидаемый ход, но тест не проходит.

Действие уничтожения проходит через тест, но действие создания не проходит тест.

Моя ошибка

Failure/Error: expect { post :create, format: :js, params: { post_id: post1.id, id: like.id } }.to change(Like, :count).by(1)
       expected #count to have changed by 1, but was changed by 0

Мой код

require 'rails_helper'

RSpec.describe LikesController, type: :controller do
  let!(:user) { create(:user) }
  let!(:post1) { create(:post, user: user) }
  let!(:like) { create(:like, user_id: user.id, post_id: post1.id) }

  describe "#create" do
    before do
      sign_in user
    end

    it "response Ajex" do
      post :create, format: :js, params: { post_id: post1.id, id: like.id }
      expect(response.content_type).to eq 'text/javascript'
    end

    it "success like function" do
      expect { post :create, format: :js, params: { post_id: post1.id, id: like.id } }.to change(Like, :count).by(1)
    end
  end

  describe "#destroy" do
    before do
      sign_in user
    end

    it "response Ajex" do
      delete :destroy, format: :js, params: { post_id: post1.id, user_id: user.id, id: like.id }
      expect(response.content_type).to eq 'text/javascript'
    end

    it "delete like function" do
      expect { delete :destroy, format: :js, params: { post_id: post1.id, user_id: user.id, id: like.id } }.to change(Like, :count).by(-1)
    end
  end
end

likes_controller.rb

 class LikesController < ApplicationController
  def create
    @like =
current_user.likes.find_or_create_by(post_id:params[:post_id])
    @likes = Like.where(post_id: params[:post_id])
    @post = Post.find(params[:post_id])
  end

  def destroy
    like = current_user.likes.find_by(post_id: params[:post_id])
    like.destroy
    @likes = Like.where(post_id: params[:post_id])
    @post = Post.find(params[:post_id])
  end
end

Я не могу решить эту проблему.Пожалуйста, научите меня подсказке.

1 Ответ

0 голосов
/ 28 декабря 2018

В вашем коде где-то есть ошибка, скорее всего, поэтому счетчик Like не может увеличиваться.Во-первых, я бы попытался выяснить, почему он не увеличивается.Поскольку вы просили подсказку, вот один из способов, которым вы можете выделить блок «функция успеха»:

context "valid" do
  before do
    post :create, format: :js, params: { post_id: post1.id, id: like.id }
  end

  it "success" do
    # You can inject a binding.pry here if needed
    expect(response.status).to eq(200)
  end

  it "response" do
    # You can inject a `binding.pry` here if needed
    # You can also inspect the `response.body` with puts if needed
    expect(JSON.parse(response.body)).to include(
      # You would modify this to match the shape of your response
      post: a_hash_including(
        like: like.id
      )
    )
  end
end

Вы захотите установить гемы pry-rails и pry-byebug (для проверки).

Причиной их разделения является то, что легче определить проблему (например, вы можете иметь действительный код ответа, но не ожидаемый результат).Это сопровождается некоторыми предостережениями (это будет сделано для более медленных тестов), но в этом примере вам будет легче определить, почему ваш post не работает.

Приведенный выше фрагмент кода должен помочь вам отладить ошибку;как только вы исправите это, вы можете вернуться к предыдущему методу проверки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...