在我的rspec测试套件中,如何使用我的应用程序使用的配置数据填充静态表?

时间:2012-10-04 23:46:10

标签: ruby-on-rails rspec 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种子数据”之类的东西时,我发现建议“使用工厂”,是的,我明白了。但是对于这种特殊情况我需要两者,所以任何帮助都会受到赞赏。

1 个答案:

答案 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即可加载种子数据。

希望有所帮助,如果您有任何问题,请与我联系。