FactoryGirl - Error de validación: la zona horaria no está incluida en la lista

Estoy usando Rspec, FactoryGirl y Capybara. Cuando se usa ActiveSupport :: TimeZone.us_zones. Corro mi prueba para mirequests/users_spec y ni siquiera llega a la prueba, ya que tiene un problema en la fábrica. Aquí está el error:

 Failure/Error: make_user_and_login
 ActiveRecord::RecordInvalid:
   Validation failed: Time zone is not included in the list
 # ./spec/support/user_macros.rb:3:in `make_user_and_login'
 # ./spec/requests/users_spec.rb:7:in `block (3 levels) in <top (required)>'

Esta es mi configuración:

app / model / user.rb

class User < ActiveRecord::Base
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  attr_accessible :email, :password, :remember_me, :username, :time_zone

  validates_presence_of :username
  validates_presence_of :time_zone
  validates_format_of :username, :with => /^(?=(.*[a-zA-Z]){3})[a-zA-Z0-9]+$/
  validates_uniqueness_of :email         
  validates_uniqueness_of :username, :case_sensitive => false
  validates_length_of :username, :within => 3..26
  validates_inclusion_of :time_zone, :in => ActiveSupport::TimeZone.us_zones
end

spec / spec_helper.rb

ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'rspec/autorun'
require 'capybara/rspec'
Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}

RSpec.configure do |config|
  config.use_transactional_fixtures = true
  config.infer_base_class_for_anonymous_controllers = false
  config.order = "random"
  config.include(MailerMacros)
  config.include(UserMacros)
end

spec / factories.rb

FactoryGirl.define do
  factory :user do
    username   'user1'
    time_zone  '(GMT-05:00) Eastern Time (US & Canada)'
    email      'user@example.com'
    password   'testing'
  end
end

spec / support / user_macros.rb

module UserMacros
  def make_user_and_login
    user = FactoryGirl.create(:user)
    visit login_path
    page.should have_selector('title', :text => 'Login')
    fill_in('Email',    :with => user.email)
    fill_in('Password', :with => user.password)
    click_button('Login')
    page.should have_selector('title', :text => 'Home')
  end
end

Cuando ejecuto la prueba para mi modelo de usuario en general, pasa toda la prueba. ¿Por qué no se reconoce como una zona horaria cuando realmente lo es?

RESPONDER

En mi modelo User.rb tuve que hacer:

validates_inclusion_of :time_zone, :in => ActiveSupport::TimeZone.us_zones.map(&:name)

Mi Fábrica:

factory :user do
  username   'user1'
  email      'user@example.com'
  time_zone  'Eastern Time (US & Canada)'
  password   'testing'
end

Mis opiniones:

<%= f.time_zone_select :time_zone, ActiveSupport::TimeZone.us_zones, {:prompt => "Select Your Time Zone *"} %>

Y si tienes una solicitud de prueba de Capybara:

page.select('(GMT-10:00) Hawaii', :from => 'Time Zone')

Buena suerte.