Проблем при проверката на обект FactoryGirl

Използвам Ruby on Rails 3.0.10, RSpec 2 и FactoryGirl. Имам следния сценарий:

Във файла models/user_spec.rb, който имам

describe User do
  let(:user) { Factory(:user) }

  it "should have a 'registered' authorization do
    user.authorization.should == "registered"
  end
end

Във файла factories/user.rb, който имам

FactoryGirl.define do
  factory :user, :class => User do |user|
    user.authorization 'registered'
  end
end

Във файла user.rb имам:

class User < ActiveRecord::Base
  DEFAULT_AUTHORIZATION = 'registered'

  validates :authorization,
    :inclusion => {
      :in      => Authorization.all.map(&:name),
      :message => "authorization is not allowed"
    },
    :presence  => true

  before_validation :fill_user_create, :on => :create


  private

  def fill_user_create
    self.authorization = Authorization::DEFAULT_AUTHORIZATION
  end
end

Когато изпълня командата rspec, получавам следната грешка:

User should have a default 'registered' Authorization
Failure/Error: let(:user) { Factory(:user) }
ActiveRecord::RecordInvalid:
  Validation failed: Users authorization is not allowed

Какъв точно е проблемът и как мога да го разреша?


BTW: Във файла models/user_spec.rb мога да използвам нещо като следното

let(:user) { User.create }

и ще работи, но предпочитам да използвам скъпоценния камък FactoryGirl. Какво съветвате?


person Backo    schedule 16.09.2011    source източник
comment
В метода fill_user_create вероятно сте искали да направите self.authorization = Authorization::DEFAULT_AUTHORIZATION   -  person eugen    schedule 16.09.2011
comment
@eugen - коригирах въпроса.   -  person Backo    schedule 16.09.2011


Отговори (1)


Бихте ли опитали да промените спецификацията си по-долу и да проверите какви са резултатите:

it "should have a 'registered' authorization" do
  system_names = Authorization.all.map(&:system_name)
  system_names.should have_at_least(1).item
  system_names.should include('registered')
  user.authorization.should == "registered"
end
person jake    schedule 17.09.2011
comment
Вижте stackoverflow.com/questions/7457403/ за повече информация. - person Backo; 18.09.2011