2016-04-10 32 views
0

私はテスト私は、コードをできるようになるRORのActiveRecord :: AssociationTypeMismatch:ユーザー(#70180695416600)予想、ハッシュ(#70180672006440)

上のソーシャルネットワーキングアプリを駆動していますが、それ自体のために話すました:

ユーザーを。 RB:

class User < ActiveRecord::Base 
    # Include default devise modules. Others available are: 
    # :confirmable, :lockable, :timeoutable and :omniauthable 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 

    has_many :friendships, dependent: :destroy 
    has_many :inverse_friendships, class_name: "Friendship", foreign_key: "friend_id", dependent: :destroy 

    def request_friendship(user_2) 
    self.friendships.create(friend: user_2) 
    end 
end 

Friendship.rb:

class Friendship < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :friend, class_name: "User" 

    def accept_friendship 
    self.update_attributes(state: "active", friended_at: Time.now) 
    end 

    def deny_friendship 
    self.destroy 
    end 

    def cancel_friendship 
    self.destroy 
    end 
end 

と私のUserモデルのテスト... user_spec.rb:私はこのテストを実行すると

require 'spec_helper' 

describe User, :type => :model do 
    let!(:user1) { User.create(email: '[email protected]', password: 'testtest', password_confirmation: 'testtest') } 
    let!(:user2) { User.create(email: '[email protected]', password: 'testtest', password_confirmation: 'testtest') } 

    it "new user has no friendships" do 
    expect(user1.friendships.length).to eq 0 
    end 

    it "can add another user as a friend" do 
    user2 = User.create(email: '[email protected]', password: 'testtest', password_confirmation: 'testtest') 
    user1.request_friendship(friend: user2) 
    expect(user1.friendships.length).to eq 1 
    end 
end 

私は次のエラーを取得する:

2) User can add another user as a friend 
    Failure/Error: self.friendships.create(friend: user_2) 

    ActiveRecord::AssociationTypeMismatch: 
     User(#70180695416600) expected, got Hash(#70180672006440) 
    # ./app/models/user.rb:11:in `request_friendship' 
    # ./spec/models/user_spec.rb:13:in `block (2 levels) in <top (required)>' 

私はより多くの詳細を与えることがしたいが、コードはかなり基本的であると私はどのようにちょうどわかりません私のUserモデルの.request_friendshipメソッドをテストします。

ありがとうございます!この行で

答えて

2
user1.request_friendship(friend: user2) 

friend: user2であなたは

{ :friend => user2 } 

、このハッシュをn個のハッシュを渡しているが、その方法は、ユーザーが期待しています。だから

user1.request_friendship(user2) 
+1

天才、ありがとう!その文法的な砂糖がすべて私を襲ってきた別の状況 –