Ruby on rails 4 用cancancan和design对控制器进行Rspec测试

Ruby on rails 4 用cancancan和design对控制器进行Rspec测试,ruby-on-rails-4,devise,factory-bot,rspec-rails,cancancan,Ruby On Rails 4,Devise,Factory Bot,Rspec Rails,Cancancan,我使用cancancan和Desive进行授权和认证。我有一个角色表,用户表有一个角色id。我需要帮助编写规范和工厂女孩测试。在我到达的那一刻 Failure/Error: expect(assigns(:blood_types)).to eq([blood_type]) 我知道我必须修正工厂女孩的角色。所以用户应该有一个角色,但我不知道怎么做 class BloodTypesController < ApplicationController before_filter :a

我使用cancancan和Desive进行授权和认证。我有一个角色表,用户表有一个角色id。我需要帮助编写规范和工厂女孩测试。在我到达的那一刻

Failure/Error: expect(assigns(:blood_types)).to eq([blood_type])
我知道我必须修正工厂女孩的角色。所以用户应该有一个角色,但我不知道怎么做

class BloodTypesController < ApplicationController
     before_filter :authenticate_user!
    load_and_authorize_resource
spec/factories/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
规格/工厂/血型.rb

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

    end
end
规格/控制器/血液类型\u控制器\u规格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

您需要为
BloodType
创建一个工厂,就像为
User
创建工厂一样


然后更改:
BloodType.create!对FactoryGirl.create(:blood\u type)有效的\u属性
我有血型工厂。刚刚更新了我的问题,包括该问题和有效的_属性。我尝试了你建议的更改
BloodType.create!有效的属性
FactoryGirl。创建(:血型)
没有帮助。检查它是否进入
index
方法,并尝试使用
expect(response)查看
index
方法的响应状态。要成功
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