2016-02-29 176 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'方法的响应状态 –