为什么使用factory_girl进行导轨测试?

时间:2017-06-08 04:46:52

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

我是rails测试的新手,所以我想知道使用名为factory_girl的gem进行测试的理由。

目前我只使用rspecs。我的型号规格如下:

require 'rails_helper'

RSpec.describe User, type: :model do


  it 'creates user' do
      User.create(email: 'asd@we.com', password: 'asasdasdasd', admin: true, firstname: 'qwe', lastname: 'wer', grade: 5, section: 'w', role: 1)
      expect(User.count).to eq(1)
  end

  it 'should not have password attribute' do

      User.create(email: 'asd@we.com', password: 'asdasdasd', admin: true, firstname: 'qwe', lastname: 'wer', grade: 5, section: 'w', role: 1)
      expect(User.first.attributes).to_not include('password')

  end

  it 'encrypts password' do
      User.create(email: 'asd@we.com', password: 'asdasdasd', admin: true, firstname: 'qwe', lastname: 'wer', grade: 5, section: 'w', role: 1)
      expect(User.first.encrypted_password).to_not eq('asdasdasd')
  end




end

在此代码的上下文中,我期待将factory_girl集成到测试中的理由。使用factory_girl是否使这段代码更简洁明了? factory_girl帮助解决了哪些具体问题?我很欣赏任何见解。谢谢!

1 个答案:

答案 0 :(得分:1)

工厂与固定装置背后的想法是,您可以为特定测试用例创建专用模型,而不是为了各种目的而维护它们的稳定性。

FactoryGirl和其他喜欢它的人会很容易地删除任意用户,就像你的代码可以崩溃到:

it 'users can be created' do
  create(:user)
  expect(User.count).to eq(1)
end

然后,您可以自定义该管理员,密码无效的用户,或任何特定情况下可能需要的任何内容。

我是工厂的忠实粉丝,因为即使他们可以让你的测试稍微慢一些,他们也会自我清理,这就是当被删除时,不再制作它们的方法。夹具通常最终充满了你不确定使用的奇怪的工件,然而移除它们会因为断言期望事物成为特定的方式而中断测试。