jpw*_*ynn 1 rspec ruby-on-rails fixtures
到目前为止,我只使用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"之类的东西时,我发现建议"使用工厂",是的,我明白了.但对于这种特殊情况,我需要两者,所以任何帮助都将受到赞赏.
我做这样的事情,我使用种子而不是固定装置(虽然我确定你也可以使用固定装置).
在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
Run Code Online (Sandbox Code Playgroud)
因此,DatabaseCleaner.strategy行告诉database_cleaner清除除传递它的表数组之外的所有内容.
设置策略后,您只需调用Rails.application.load_seed加载种子数据.
希望有所帮助,如果您有任何疑问,请告诉我.
| 归档时间: |
|
| 查看次数: |
1467 次 |
| 最近记录: |