因此,我正在使用复杂的代码库,使用RSpec和FactoryGirl在Rails 4中完成的许多ERP解决方案模型。幸运的是,它有很多测试,不是理想的,而是合理的数字。其中一个困难点始终是复杂的工厂设置。例如,要创建一个简单的发票,我们必须做很多工作:
product = create(:product, business: test_business, price: 100)
activity = create(:activity, business: test_business)
create(:sales_point, business: test_business, fiscal_number: 1)
user = create(:user)
Invoice.create!(business: test_business,
sales_point: 1,
invoice_type: InvoiceType::INVOICE_B,
receptor_fiscal_category: FiscalCategory::BUSINESS_A,
details: [InvoiceDetail.new( product: product,
description: product.name,
unitary_amount: 100,
quantity: 1,
amount: 100,
activity: activity)],
total_net: 100,
total_tax: 21,
total_amount: 121,
created_by: user,
updated_by: user)
这只是为了创建一个简单的测试发票!我知道Thoughtbots,FactoryGirl的创造者,实际上主张不要让同一个模型的多个工厂或太多的复杂性。而且我可以理解为什么......当你开始在工厂上做太多的魔法时,它们会与你的测试结合得太多......突然你改变了一些东西并且爆炸......数百个测试开始失败。
因此,我们不是改变东西,或者试图“过于聪明”......我们最终为复杂模型(例如Invoice)提供了5-10个版本的工厂(例如invoce_by_total_ammount,invoice_by_product_list,invoice_cash等)。
问题是,如果您曾经使用过像这样的大型代码库(100~模型),那么处理这种复杂设置以创建测试对象的标准方法是什么?这是多么的成功?
答案 0 :(得分:0)
我建议在函数中包装该代码块,并将所需的发票类型作为参数传递。
这些类型的函数可以放在一个帮助文件中,该文件可以包含在Rspec.configure
块中,以便它可用于所有测试。