Проблемы с осмотром объекта FactoryGirl - PullRequest
1 голос
/ 16 сентября 2011

Я использую 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 . О чем вы советуетесь?

1 Ответ

0 голосов
/ 17 сентября 2011

Не могли бы вы попробовать изменить спецификацию, как показано ниже, и проверить, каковы результаты:

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
...