我有一个模型,Trip,它将“refund_policy”的默认值设置为该旅行公司的“refund_policy”。公司本身有一个默认值,因为它是ID为4的公司政策的“refund_policy”。
我对一个有效的Trip工厂的测试失败了,许多其他的测试也失败了,因为数据库中没有ID为4的公司。我试图设置一个有明确ID的公司。而且,我试图对该公司或其退款政策进行存根的尝试还没有奏效。
根据先前的测试,所有使用的工厂都是有效的。
我试过:
#trip_spec.rb
describe Trip do
let(:company) { FactoryGirl.build(:company) }
let(:refund_policy) { 'example refund policy' }
before do
company.stub(:refund_policy).and_return(refund_policy)
Company.stub(:find).and_return(company)
end
it "has a valid factory" do
expect( FactoryGirl.build :trip, company_id: company.id ).to be_valid
end
end我也尝试过:
let(:company) { FactoryGirl.build(:company, id: 4) }
it "has a valid factory" do
expect( FactoryGirl.build :trip ).to be_valid
end以及:
let!(:company) { FactoryGirl.create(:company, id: 4) }
it "has a valid factory" do
expect( FactoryGirl.build :trip ).to be_valid
end所有结果都会导致此错误消息。
# gives this error
Trip has a valid factory
Failure/Error: let(:company) { FactoryGirl.build(:company) }
ActiveRecord::RecordNotFound:
Couldn't find Company with id=4
# ./app/models/company.rb:70:in `default_refund_policy'
# ./app/models/company.rb:66:in `set_defaults'
# ./spec/models/trip_spec.rb:5:in `block (2 levels) in <top (required)>'trip refund_policy的refund_policy默认值
#trip.rb
def set_defaults
self.refund_policy = company.refund_policy if company && (refund_policy.blank? || (refund_policy && refund_policy.strip.length == 0))
end公司refund_policy的默认值
#company.rb
def set_defaults
self.refund_policy = default_refund_policy if refund_policy.blank? || (refund_policy && refund_policy.strip.length == 0)
end
def default_refund_policy
Company.find(4).refund_policy
end如何有效地解释这一缺省值路径?
提前谢谢。
发布于 2014-07-06 14:44:08
这三种方法都失败了,因为set_defaults作为构建过程的一部分被调用,后者依次调用default_return_policy,后者依次调用find。按照原样使用生产代码,您需要在尝试创建公司之前对Company.find进行存根。
此外:
build而不是createlet而不是let!,并且没有引用示例中的变量。以下几点至少可以让你更接近你:
describe Trip do
before do
company = InstanceDouble(Company, refund_policy: 'example refund policy')
Company.stub(:find).and_return(company)
end
it "has a valid factory" do
expect( FactoryGirl.build :trip, company_id: company.id ).to be_valid
end
endhttps://stackoverflow.com/questions/24592532
复制相似问题