Ruby on rails 为什么这个工厂在手动创建通过的记录时导致测试失败?

Ruby on rails 为什么这个工厂在手动创建通过的记录时导致测试失败?,ruby-on-rails,rspec,factory-bot,Ruby On Rails,Rspec,Factory Bot,在Rails应用程序中,我正在测试用户确认 scenario "unconfirmed user cannot login" do user = create(:user, confirmation_sent_at: 10.days.ago ) #FactoryGirl factory login user expect(current_path).to eq(#unconfirmed_user_path) end 此操作失败,用户已登录 但是如果我改变第一行如

在Rails应用程序中,我正在测试用户确认

scenario "unconfirmed user cannot login" do
  user = create(:user, confirmation_sent_at: 10.days.ago ) #FactoryGirl factory
  login user
  expect(current_path).to eq(#unconfirmed_user_path)
end
此操作失败,用户已登录

但是如果我改变第一行如下

user = create(:user)
user.confirmation_sent_at = 10.days.ago
user.save
login user .....
考试通过了

我忽略了什么?这两段代码是等价的,不是吗

编辑
#工厂/user_factory.rb
工厂:用户做什么
电子邮件{Faker::Internet.email}
密码伪造者::互联网。密码(10,20)
结束
#models/user.rb
#==架构信息
#
#表名:用户
#
#id:整数不为空,主键
#电子邮件:字符串(255)默认值(“”),不为空
#加密密码:字符串(255)默认值(“”),非空
#确认令牌:字符串(255)
#确认时间:datetime
#确认发送时间:datetime
#  ...
类用户
在第二个版本中调用user.reload时会发生什么?我想你是想让第一次考试不及格吧?我认为如果用户登录,他将处于已确认的用户路径上。任何人要确定两者是否等效,他们需要查看您的FactoryGirl:user definition和您的用户模型实现。@ruby_新手测试应该通过。未经确认的用户不应该能够登录,事实上,在浏览器中与应用程序交互时就是这种情况。但是,该测试允许用户登录,虽然需要未确认的用户路径,但返回登录路径后的用户路径。@PeterAlfvin代码已添加在上面。但本质上,在FactoryGirl创建函数中包含一个属性(即,
create(:object,attribute:'something'
)与创建对象然后设置属性(即,
object.attribute='something'
)是相同的,不是吗?在第二个版本中调用user.reload时会发生什么?我假设您希望第一个测试失败?我认为如果用户登录,他将处于已确认的用户路径上。要确定两者是否等效,他们需要查看您的FactoryGirl:用户定义和用户模型实现。@ruby\u newbie测试应该通过。未经确认的用户不应该能够登录,事实上,在浏览器中与应用程序交互时也是如此。但是,测试允许用户登录,虽然需要“未经确认的用户”路径,但会返回“登录路径后的用户”。@PeterAlfvin代码已在上面添加。但本质上,包括属性wit在FactoryGirl创建函数(即,
create(:object,attribute:'something'
)中,它与创建对象然后设置属性(即,
object.attribute='something'
)相同,不是吗?
#factories/user_factory.rb

factory :user do
  email { Faker::Internet.email }
  password Faker::Internet.password(10, 20) 
end

# models/user.rb
# == Schema Information
#
# Table name: users
#
#  id                     :integer          not null, primary key
#  email                  :string(255)      default(""), not null
#  encrypted_password     :string(255)      default(""), not null
#  confirmation_token     :string(255)
#  confirmed_at           :datetime
#  confirmation_sent_at   :datetime
#  ...

class User < ActiveRecord::Base

  devise :invitable, :database_authenticatable, :registerable, :confirmable, :lockable, :recoverable, :rememberable, :trackable, :validatable, :omniauthable

 ...
end