FactoryGirl – validation失败:时区未包含在列表中
我正在使用Rspec,FactoryGirl和Capybara。 使用ActiveSupport :: TimeZone.us_zones时。 我为我的requests/users_spec
运行我的测试,它甚至没有达到测试,因为它在工厂有问题。 这是错误:
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 '
这是我的设置:
应用程序/模型/ user.rb
class User /^(?=(.*[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_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
投机/ 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
规格/支持/ 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
当我为我的用户模型运行测试时,它会通过所有测试。 为什么它不是真的识别为时区?
回答
在我的User.rb模型中,我必须这样做:
validates_inclusion_of :time_zone, :in => ActiveSupport::TimeZone.us_zones.map(&:name)
我的工厂:
factory :user do username 'user1' email 'user@example.com' time_zone 'Eastern Time (US & Canada)' password 'testing' end
我的观点:
"Select Your Time Zone *"} %>
如果您有Capybara的测试请求:
page.select('(GMT-10:00) Hawaii', :from => 'Time Zone')
祝好运。
将时区数组转换为用户模型validation中的字符串数组。
validates_inclusion_of :time_zone, :in => ActiveSupport::TimeZone.us_zones.map(&:to_s)
- Capybara webkit的数据库清理问题
- RSpec + Capybara请求规格w / JS无法正常工作
- button_to表单提交在浏览器中工作但是没有rspec / capybara测试,路由错误
- 使用FileApi将文件上载到输入区域
- fill_in如何在Rspec / Capybara中运作?
- Capybara NoMethodError:未定义的方法`visit’for
- 如何在集成测试中编写用于签署用户的快捷方式?
- 为什么即使我删除了application.js文件,Capypara + Rspect测试仍然通过?
- 关于current_path对象,Rspec和capybara,visit和get方法之间的区别