2014-12-23 4 views
0

방금 ​​모델에 새 기능을 추가했으며 rspec으로 테스트하려고했습니다. 그것은 내 테스트가 실패하고 아무것도 DB에 저장되고 있기 때문에 내가 뭔가 잘못하고있는 것처럼 보인다. 내가 원하는 것은 사용자로서 다른 사용자를 차단할 수있는 어려움을 갖는 것이다.rspec 테스트 db 저장 안함

def block 
     block_action = Blocked.new 
     block_action.add_blocked(current_user.id,params[:id]) 
     current_user.blockeds << User.find(params[:id]) 
    end 

    def is_blocked 
     blocked = current_user.blocked_by(current_user.id,params[:id]) 
     blocked 
    end 

내 차단 된 모델은 다음과 같습니다 :

belongs_to :user_blocking, class_name: 'User' 
    belongs_to :user_blocked, class_name: 'User' 

    def add_blocked(blocking_id,blocked_id) 
    self.user_blocking_id = blocking_id 
    self.user_blocked_id = blocked_id 
    self.save! 
    end 

을이 내 테스트입니다

has_many :blockeds 
    has_many :blocked_users, :through=> :blockeds 

내 user_controller은 다음과 같습니다

내 사용자 모델은 다음있다 :

describe 'Block' do 

    let(:user_one) { Fabricate :user } 
    let(:user_two) { Fabricate :user } 

    it 'should block a user' do 
     post :block, current_user: user_one.to_param, id: user_two.id.to_param, format: :json 
     expect{ 
     post :is_blocked, current_user: user_one.to_param, id: user_two.id.to_param, format: :json 
     }.to eq(user_two) 
    end 
    end 

user_tone이 user_one에 의해 차단되었는지 테스트하고 싶습니다. 아무것도 DB에 저장되지 않습니다. 어떤 도움?

expected: #<User id: 2, email: "[email protected]", encrypted_password: "$2a$04$cKnZx8h9nVX1xQOruH6.yeSHIl989EA.amK.fqz4kwz...", 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: "2014-12-23 13:48:32", updated_at: "2014-12-23 13:48:32", bio: nil, fb_access_token: "accusamuscumsit", fb_app_id: "essesedmaiores", phone: nil, address: nil, authentication_token: "vH3N1KTz1AVmP8fTRAye", gender: "male", profile_completed: false, zip_code: "95304-2111", state: "Indiana", city: "New Chaunceymouth", latitude: 37.6841772, longitude: -121.3770336, access_code_id: nil, locked_at: nil, cover: nil, fb_global_id: nil, birthday: "1996-02-18", age: 226, channel_id: "mh3_dPdbihISTdX8TCOKkQ", first_name: "Tressa", last_name: "Keeling", access_code_type: nil, facebook_data_updated_at: nil> 
      got: #<Proc:[email protected]/Users/toptierlabs/Documents/projects/kinnecting_backend/spec/controllers/api/users_controller_spec.rb:206> 

답변

0

당신은 그 블록의 방법을 실행을 평가하려는 상황에서 사용하기위한 것입니다 expect에 블록을 전달되고 있습니다

내가 테스트를 excecute 후 무엇을 얻을 환경을 변경합니다 (예 : to_change 통해). 일반적으로 트랜잭션의 컨텍스트에서 실행되지만, 귀하의 경우에는 eq 정규 표현식과 함께 사용하기 때문에 전혀 실행되지 않습니다. 당신이 컨트롤러 작업에서 반환 값을 확인하려면

, 당신은 같이 response의 값을 확인해야합니다

post :is_blocked, current_user: user_one.to_param, id: user_two.id.to_param, format: :json 
expect(response.body).to eq(user_two.to_json) 

이에 대한 자세한 내용은 How to check for a JSON response using RSpec?를 참조하십시오.