2015-09-12 43 views
0

我試圖測試下列控制器操作(使用Ruby on Rails的,RSPEC和FactoryGirl):RSPEC錯誤:預期#<的ActiveRecord ::協會:: CollectionProxy>有:無

class ContactsController < ApplicationController 

    before_action :authenticate_user! 

    def index 
    @contacts = current_user.contacts 
    # @contacts = Contact.all 
    end 

這裏我contacts_controller_spec.rb文件:

require 'rails_helper' 

describe ContactsController do 

    before do 
    @user = FactoryGirl.create(:user_with_contacts) 
    sign_in @user 
    end 

    describe "GET INDEX" do 
    it "assigns @contacts" do 
     expect(assigns(:contacts)).to eq(@user.contacts) 
    end 
    end 

Failure/Error: expect(assigns(:contact)).to eq([contact]) 

     expected: [#<Contact id: 295, first_name: "Loy", email: "[email protected]", phone_number: "6044339393", created_at: "2015-09-12 19:13:42", updated_at: "2015-09-12 19:13:42", last_name: "Wyman", user_id: 343>] 
      got: #<Contact id: nil, first_name: nil, email: nil, phone_number: nil, created_at: nil, updated_at: nil, last_name: nil, user_id: nil> 

這裏是我的users_spec.rb文件:

FactoryGirl.define do 
    factory :user do 
    email { Faker::Internet.email } 
    password { "32423fdsfasf42" } 

    factory :user_with_contacts do 
     transient do 
     contacts_count 2 
     end 
     after(:create) do |user, evaluator| 
     create_list(:contact, evaluator.contacts_count, user: user) 
     end 
    end 
    end 
end 

任何幫助嗎?我一直堅持這個很長一段時間。

如果我叫

puts @user.inspect 

我得到

#<User id: 340, email: "[email protected]", encrypted_password: "$2a$04$Si5k6Q1eYERvhQITXKBoIOGEzPyK50E3IQ.yjRcqmDj...", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 0, current_sign_in_at: nil, last_sign_in_at: nil, current_sign_in_ip: nil, last_sign_in_ip: nil, created_at: "2015-09-12 19:13:42", updated_at: "2015-09-12 19:13:42"> 

調用

puts @user.contacts.inspect 

我得到

#<ActiveRecord::Associations::CollectionProxy [#<Contact id: 289, first_name: "Fae", email: "[email protected]", phone_number: "6044339393", created_at: "2015-09-12 19:13:42", updated_at: "2015-09-12 19:13:42", last_name: "Spinka", user_id: 340>, #<Contact id: 290, first_name: "Marcellus", email: "[email protected]", phone_number: "6044339393", created_at: "2015-09-12 19:13:42", updated_at: "2015-09-12 19:13:42", last_name: "Bashirian", user_id: 340>]> 

它只是當我打電話給assigns(:contacts)問題發生!

回答

0

我想你忘了調用控制器動作。 :)

嘗試增加get :index

it "assigns @contacts" do 
    get :index 
    expect(assigns(:contacts)).to eq(@user.contacts) 
end