在测试数据库中创建FactoryGirl对象会导致ArgumentError:错误的参数(预期的URI对象或URI字符串)

时间:2016-03-09 19:43:50

标签: ruby-on-rails ruby factory-bot

我已经为手动测试创建了一个单独的数据库,但是当我尝试将Factory创建到数据库时遇到了上述错误。

以下是工作流程:

`rails c test`
`FactoryGirl.create(:reverification_tracker)
`ArgumentError: bad argument (expected URI object or URI string)
   from /Users/drubio/.rvm/rubies/ruby-2.2.3/lib/ruby/2.2.0/uri/common.rb:715:in `URI'

这是我试图创建的工厂及其附带的协会:

  FactoryGirl.define do
    factory :reverification_tracker do
    association :account
    message_id 'XYZ0-1234-AB56-67GJ'
    feedback ''
    phase 0
    status 0
    attempts 1
    sent_at DateTime.now.utc
    created_at DateTime.now.utc
    updated_at DateTime.now.utc
 end

FactoryGirl.define do
  sequence :account_login do |n|
    "login-#{n}"
  end

factory :account do
  sequence :email do |n|
    "someone#{n}@gmail.com"
  end

  email_confirmation { |account| account.send :email }
  url { Faker::Internet.url }
  login { generate(:account_login) }
  password { Faker::Internet.password }
  password_confirmation { |account| account.send(:password) }
  current_password { |account| account.send(:password) }
  twitter_account 'openhub'
  name { Faker::Name.name + rand(999_999).to_s }
  about_raw { Faker::Lorem.characters(10) }
  activated_at { Time.current }
  activation_code nil
  country_code 'us'
  email_master true
  email_kudos true
  email_posts true

  association :github_verification
end

为什么会这样?在开始时我注意到在我的本地路径目录中有ruby-2.2.3ruby 2.2.0

的参考用户

另外,您会注意到我的帐户工厂上有一个网址字段。我使用faker gem创建了一个测试网址。据我所知,似乎没有问题。此外,我的帐户模型的url_format验证设置为true,验证定义如此

class UrlFormatValidator < ActiveModel::EachValidator


 # With Ruby 2.2, the default URI parser is more forgiving than we want, so use the same trick Rails does in Rack
  # see: https://bugs.ruby-lang.org/issues/10669
  def validate_each(record, attribute, value)
    valid_url = begin
      @parser ||= defined?(URI::RFC2396_Parser) ? URI::RFC2396_Parser.new : URI
      @parser.parse(value).is_a?(URI::HTTP)
    rescue URI::InvalidURIError
      false
    end

    record.errors.add(attribute, options[:message] || I18n.t('accounts.invalid_url_format')) unless valid_url
  end
end

然而,我确信这也不是问题所在。我想知道是否有其他人以前遇到过这个问题。我在这个网站上看到了与xhr类似的问题,但它并不完全符合我的需要。任何见解都会非常有用。

0 个答案:

没有答案