关系控制器的 Rspec 失败,找不到具有"id"= 的用户



我正试图为我的关系控制器制定规范,但#create方法失败(找不到id为的用户)。你能告诉我怎么修吗?谢谢你的帮助,如果你有任何问题,请问。:)

relationships_controller:

class RelationshipsController < InheritedResources::Base
  def create
    user = User.find(params[:followed_id])
    current_user.follow(user)
    redirect_to user
  end
  def destroy
    user = Relationship.find(params[:id]).followed
    current_user.unfollow(user)
    redirect_to user
  end
end

relationships_controller_spec:

require 'rails_helper'
describe RelationshipsController do
  let(:relationship) { create(:relationship) }
  let(:user) { create(:user) }
  before do
    sign_in :user, create(:user)
  end

  describe '#create' do
    let!(:user) { create(:user) }
    it "should require logged-in user to create relationship" do
      post :create, followed_id: user.id
      expect{
        Relationship.create
      }.to change(Relationship, :count).by(1)
      redirect_to root_path
    end
  end

  describe '#create' do
    let!(:relationship) { create(:relationship) }
    it "should require logged-in user to destroy relationship" do
      expect {
        delete :destroy, id: relationship.id
      }.to change(Relationship, :count).by(-1)
      redirect_to root_path
    end
  end
end

故障:

RelationshipsController
  #create
    should require logged-in user to destroy relationship
  #create
    should require logged-in user to create relationship (FAILED - 1)
Failures:
  1) RelationshipsController#create should require logged-in user to create relationship
     Failure/Error:
       expect{
         Relationship.create
       }.to change(Relationship, :count).by(1)
       expected #count to have changed by 1, but was changed by 0

关系:

class Relationship < ActiveRecord::Base
  #Associations
  belongs_to :follower, class_name: "User"
  belongs_to :followed, class_name: "User"
#Validations
  validates :follower_id, presence: true
  validates :followed_id, presence: true
end

用户:

class User < ActiveRecord::Base
      # Associations
      has_many :active_relationships, class_name:  "Relationship",
                                      foreign_key: "follower_id",
                                      dependent:   :destroy
      has_many :passive_relationships, class_name:  "Relationship",
                                      foreign_key: "followed_id",
                                      dependent:   :destroy
      has_many :following, through: :active_relationships, source: :followed
      has_many :followers, through: :passive_relationships, source: :follower
      # Follows a user.
      def follow(other_user)
        active_relationships.create(followed_id: other_user.id)
      end
    end

通过规范中的:followed_id并再次运行

describe '#create' do
it "should require logged-in user to create relationship" do
  post :create, followed_id: user.id
  expect{
    Relationship.create
  }.to change(Relationship, :count).by(1)
  redirect_to root_path
end

结束

在测试中-

describe RelationshipsController do
  let(:relationship) { create(:relationship) }
  let(:user) { create(:user) }

直到需要时才创建用户。

describe RelationshipsController do
  let(:relationship) { create(:relationship) }
  let!(:user) { create(:user) }

使用!运算符强制创建用户变量并将其存储到数据库中。否则,变量将延迟加载(仅在需要时)。这就是为什么它在数据库中不可用的原因

结果如下:

  describe '#create' do
    let!(:followed) { create(:user) }
    it "should require logged-in user to create relationship" do
      expect{
        post :create, followed_id: followed.id
      }.to change(Relationship, :count).by(1)
      redirect_to root_path
    end
  end

最新更新