2016-02-29 162 views
0

我已經使用cancancan和設計進行授權和驗證。我有一個角色表和用戶表都有role_id。我需要幫助來寫規格和工廠女孩的測試。目前我得到cancancan和devise控制器的Rspec測試

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

我知道我必須修復工廠女孩的角色。所以用戶應該有一個角色,但我不知道如何。

class BloodTypesController < ApplicationController 
    before_filter :authenticate_user! 
    load_and_authorize_resource 

規格/支持/ controller_macros.rb

module ControllerMacros 
    def login_user 
    before(:each) do 
     @request.env["devise.mapping"] = Devise.mappings[:user] 
     user= FactoryGirl.create(:user) 
     sign_in user 
    end 
    end 
end 

規格/工廠/ users.rb的

FactoryGirl.define do 
    factory :user do 
    first_name Faker::Name.first_name 
    email { Faker::Internet.email } 
    password "password" 
    password_confirmation "password" 
    confirmed_at Date.yesterday 
    end 
end 

規格/工廠/ blood_types.rb

FactoryGirl.define do 
    factory :blood_type do 
    name "AB" 

    end 
end 

規範/controllers/blood_types_controller_spec.rb

RSpec.describe BloodTypesController, type: :controller do 
    let(:valid_attributes) { 
     FactoryGirl.build(:blood_type).attributes 
    } 

    let(:valid_session) { {} } 
    describe "GET #index" do 
    login_user 
    it "assigns all blood_types as @blood_types" do 
     blood_type = BloodType.create! valid_attributes 
     get :index, {} 
     expect(assigns(:blood_types)).to eq([blood_type]) 
    end 
    end 

回答

0

你需要爲你的User創造了BloodType創建一個工廠。

然後改變:BloodType.create! valid_attributesFactoryGirl.create(:blood_type)

+0

我blood_type工廠。只是更新了我的問題,包括那個和valid_attributes。我嘗試了你建議改變'BloodType.create! valid_attributes'到'FactoryGirl.create(:blood_type)'沒有幫助。 – user1876128

+0

檢查是否進入'index'方法,並嘗試使用'expect(response).to be_success'來查看'index'方法的響應狀態 –