到目前为止,我只使用rspec和工厂,而不是灯具或种子数据。但是现在我需要一个(静态)优惠券表,在运行我的集成测试(rspec + capybara,而不是cuke)时,我的应用程序可以使用十几个配置数据记录。
我的rspec测试有一个FactoryGirl工厂,可以创建一个商店。
在我的应用中,当商店由init_store(coupon_code)初始化时,会传入优惠券代码,打开/关闭各种功能(通过在优惠券表中查找该优惠券的设置)。
所以,当我创建一个Store工厂时,我还需要指定(通过trait?)优惠券代码。然后,在我的模型中,初始化商店的方法将使用优惠券代码在优惠券表中查找一堆设置。 (每个优惠券有大约20个属性可以打开/关闭各种商店功能。)
我的coupons.yml文件包含我的应用使用的实际优惠券表数据。现在,我需要在运行测试时将它们提供给应用程序。 (不要关心'脆弱',这张表不会改变。)
没有使用灯具或种子数据与rspec,我不知道如何/在哪里放我的coupons.yml文件以及如何将优惠券“加载”到测试优惠券表中,以便他们可用于我的应用程序测试正在运行。
我是否使用coupons.yml预先填充种子数据?如果是这样,每次我的测试运行时如何将其加载到我的测试数据库中?
或者,我应该使用灯具吗?
无论哪种方式,coupons.yml应该去哪里以及如何加载它(在Store工厂中?在其中一个规范中?在specs_helper中?)
当我搜索“使用固定装置和工厂”或“使用rspec种子数据”之类的东西时,我发现建议“使用工厂”,是的,我明白了。但是对于这种特殊情况我需要两者,所以任何帮助都会受到赞赏。
答案 0 :(得分:5)
我做这样的事情,我使用种子而不是固定装置(虽然我确定你也可以使用固定装置)。
在spec_helper.rb
中RSpec.configure do |config|
...
config.before :suite do
DatabaseCleaner.strategy = :truncation, {:except => %w[table1 table2]}
DatabaseCleaner.clean_with :truncation
Rails.application.load_seed
end
...
end
因此,DatabaseCleaner.strategy行告诉database_cleaner清除除传递它的表数组之外的所有内容。
设置策略后,只需调用Rails.application.load_seed
即可加载种子数据。
希望有所帮助,如果您有任何问题,请与我联系。