我是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帮助解决了哪些具体问题?我很欣赏任何见解。谢谢!
答案 0 :(得分:1)
工厂与固定装置背后的想法是,您可以为特定测试用例创建专用模型,而不是为了各种目的而维护它们的稳定性。
FactoryGirl和其他喜欢它的人会很容易地删除任意用户,就像你的代码可以崩溃到:
it 'users can be created' do
create(:user)
expect(User.count).to eq(1)
end
然后,您可以自定义该管理员,密码无效的用户,或任何特定情况下可能需要的任何内容。
我是工厂的忠实粉丝,因为即使他们可以让你的测试稍微慢一些,他们也会自我清理,这就是当被删除时,不再制作它们的方法。夹具通常最终充满了你不确定使用的奇怪的工件,然而移除它们会因为断言期望事物成为特定的方式而中断测试。