Проблемы с просмотром объекта 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

В чем именно заключается проблема и как ее решить?


Кстати: в файле 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