Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 Rails测试堆栈导致用户验证失败 更新:伪造生成的第一个电子邮件地址始终相同。后面的是不同的,但第一个总是一样的。我相信这可能是我的问题的原因。_Ruby On Rails 3_Rspec_Factory Bot - Fatal编程技术网

Ruby on rails 3 Rails测试堆栈导致用户验证失败 更新:伪造生成的第一个电子邮件地址始终相同。后面的是不同的,但第一个总是一样的。我相信这可能是我的问题的原因。

Ruby on rails 3 Rails测试堆栈导致用户验证失败 更新:伪造生成的第一个电子邮件地址始终相同。后面的是不同的,但第一个总是一样的。我相信这可能是我的问题的原因。,ruby-on-rails-3,rspec,factory-bot,Ruby On Rails 3,Rspec,Factory Bot,我已经研究一个问题3天了,我试着用我的方式来学习这些测试是如何工作的。但我不知所措 我有一个用户模型和一个factory\u-girl用户工厂。看起来像这样: FactoryGirl.define do factory :user do sequence(:email) { |n| Forgery(:internet).email_address } sequence(:company) { |n| Forgery(:name).company_name }

我已经研究一个问题3天了,我试着用我的方式来学习这些测试是如何工作的。但我不知所措

我有一个用户模型和一个
factory\u-girl
用户工厂。看起来像这样:

FactoryGirl.define do
  factory :user do
    sequence(:email)      { |n| Forgery(:internet).email_address }
    sequence(:company)    { |n| Forgery(:name).company_name }
    password              "password"
    password_confirmation "password"
    active                 true   
    admin false

    trait :admin do
      admin true
    end

    trait :inactive do
      active false
    end

  end

end
module LoginMacros
  def login_user
    plan = FactoryGirl.create(:plan, name: "Test Multi")
    user = FactoryGirl.create(:user)
    subscription = FactoryGirl.create(:subscription, plan: plan) # Fails here
    visit login_path
    fill_in 'Email', :with => user.email
    fill_in 'Password', :with => user.password
    click_button 'Go'
    user
  end
end
FactoryGirl.define do
  factory :subscription do
  end
end
我有一堆规范要运行,我在处理它们时使用
Guard
一次运行一个规范。在我的规格顶部,我有一行:

let!(:user) { login_user }
spec/support
中,我有一个名为
login\u macros.rb
的文件,如下所示:

FactoryGirl.define do
  factory :user do
    sequence(:email)      { |n| Forgery(:internet).email_address }
    sequence(:company)    { |n| Forgery(:name).company_name }
    password              "password"
    password_confirmation "password"
    active                 true   
    admin false

    trait :admin do
      admin true
    end

    trait :inactive do
      active false
    end

  end

end
module LoginMacros
  def login_user
    plan = FactoryGirl.create(:plan, name: "Test Multi")
    user = FactoryGirl.create(:user)
    subscription = FactoryGirl.create(:subscription, plan: plan) # Fails here
    visit login_path
    fill_in 'Email', :with => user.email
    fill_in 'Password', :with => user.password
    click_button 'Go'
    user
  end
end
FactoryGirl.define do
  factory :subscription do
  end
end
看到上面以
subscription=
开头的那一行了吗?该操作失败,并出现以下错误:

 Failure/Error: let!(:user) { login_user }
 ActiveRecord::RecordInvalid:
   Validation failed: Email has already been taken
我的
订阅
工厂如下所示:

FactoryGirl.define do
  factory :user do
    sequence(:email)      { |n| Forgery(:internet).email_address }
    sequence(:company)    { |n| Forgery(:name).company_name }
    password              "password"
    password_confirmation "password"
    active                 true   
    admin false

    trait :admin do
      admin true
    end

    trait :inactive do
      active false
    end

  end

end
module LoginMacros
  def login_user
    plan = FactoryGirl.create(:plan, name: "Test Multi")
    user = FactoryGirl.create(:user)
    subscription = FactoryGirl.create(:subscription, plan: plan) # Fails here
    visit login_path
    fill_in 'Email', :with => user.email
    fill_in 'Password', :with => user.password
    click_button 'Go'
    user
  end
end
FactoryGirl.define do
  factory :subscription do
  end
end

我不知道那家工厂是否正确。在我的应用程序中,
订阅属于用户
计划
。阅读文档后,我仍然不清楚如果我使用
伪造
gem,我怎么会收到重复的电子邮件。有人能帮忙吗?显然,我不能在这上面花费更多的时间。

您的
登录用户
方法引用
用户
来指定电子邮件值,但不清楚
用户
是在哪里定义的。我猜它在对这个方法的每个连续调用上都返回相同的值。如果不清楚您在哪里定义了
user
,您可能希望输出
defined?(user)
login\u user
的开头,查看它是什么类型的对象。

我能够解决这个问题,方法是强制将
RSpec
RSpec rails
升级到~>2.14.0,并按照找到的说明进行操作。

我在格式化过程中错误地删除了那一行,只是将它添加了回来。谢谢你的帮助。