加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 创建记录似乎不会持久存在测试数据库,rspec,fa

发布时间:2020-12-17 03:50:00 所属栏目:百科 来源:网络整理
导读:根据 factory_girl_rails文档:这是factory_girl build()和create()方法之间的区别: # Returns a User instance that’s not saved user = build(:user) # Returns a saved User instance user = create(:user) 我知道工厂的强大之处在于它们使您的测试套件
根据 factory_girl_rails文档:这是factory_girl build()和create()方法之间的区别:

# Returns a User instance that’s not saved

user = build(:user)

# Returns a saved User instance

user = create(:user)

我知道工厂的强大之处在于它们使您的测试套件变得快速,因为它允许您运行测试而无需通过build()方法触摸数据库.另一方面,create()方法仍会触及数据库,因为它会将记录持久保存到数据库中.

我很困惑,因为我在使用create()后在我的测试中设置了一个断点

> rails控制台说该对象持久保存到数据库(如预期的那样)
> test / test.log显示对象被持久化到数据库(如预期的那样)
>但是当我查看测试数据库中的表时:它不在那里(不是预料到的.我希望看到数据库中的对象)

#someApp/spec/models/user_spec.rb
RSpec.describe User,type: :model do
  it "checks the age on the basic 'User' Factory " do
    user = create(:user) # should create a user and persist it to the database
    binding.pry
    expect(user.age).to eq(28)
  end
end

执行在断点处停止,并且rails控制台打开.我测试持久性,它返回true:

user.persisted? 
  => true

但是,我查看表中的test数据库,刷新表,但仍然没有显示记录:

record does not display in table

我错过了什么?我认为当你使用create()时,记录将被持久化到数据库.它实际上根本没有保存到数据库中吗?

解决方法

RSpec在交易中运行测试.这意味着在测试开始之前,会打开一个事务,在完成测试之后,它会回滚.这样,测试与数据库接口但没有数据从事务外部可见(因此从RSpec进程外部)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读