在Rspec中,我试图通过减少持久化到数据库的对象数量来加速测试。我也在用工厂女孩。
使用下面的示例,这是在数据库中创建的吗?如果是这样的话,如何才能将其更改为不使用数据库呢?
require 'rails_helper'
describe BankingDetail do
let(:user) {create :user}
let(:principal){create :principal}
let(:credit_type){create :credit_type}
let(:security_type_1){create :security_type}
let(:security_type_2){create :security_type, name: 'Test Working Capital'}
let(:banking_detail) {create :banking_detail, credit_type: credit_type, bank_line: "12345.00000", bank_id: 1, principal: principal, create_user: user}
it 'is a valid factory' do
expect(FactoryGirl.create(:banking_detail, credit_type: credit_type, bank_line: "12345.00000", bank_id: 1, principal: principal, create_user: user )).to be_valid
end
it 'should not be saved when principal is empty' do
banking_detail.principal_id = nil
expect(banking_detail.save).not_to be_truthy
end
it 'should not be saved when create user is empty' do
banking_detail.create_user_id = nil
expect(banking_detail.save).not_to be_truthy
end
it 'should be able to generate a version' do
banking_detail = build(:banking_detail, credit_type: credit_type, bank_line: "12345.00000", bank_id: 1, principal: principal, create_user: user)
expect{banking_detail.generate_version!('update')}.to change(BankingDetailVersion, :count).by(1)
end
context 'validation' do
it 'should not save when bank line is empty ' do
banking_detail.bank_line = nil
expect(banking_detail.save).not_to be_truthy
end
it 'should not save when bank line is not in the minimum maximum currency range ' do
banking_detail.bank_line = 1_000_000_000_000_000_0000
expect(banking_detail.save).not_to be_truthy
end
it 'should not save when credit_available is not in the minimum maximum currency range ' do
banking_detail.credit_available = 1_000_000_000_000_000_0000
expect(banking_detail.save).not_to be_truthy
end
end
end发布于 2015-07-09 10:46:19
例如,如果使用build_stubbed,就会有一个FactoryGirl方法。它可以大大加快规格,并且不会为数据库创建对象。
我引用这里的一点描述
build_stubbed是更年轻、更时髦的构建伙伴;它实例化并分配属性,就像build一样,但这正是相似之处所在。它使对象看起来像是持久化的,创建与build_stubbed策略的关联(而构建仍然使用create),并存根出一些与数据库交互并在调用它们时引发的方法。这将导致更快的测试,并减少对数据库的测试依赖。
https://stackoverflow.com/questions/31314999
复制相似问题