1

到目前为止,我只使用 rspec 和工厂,而不是固定装置或种子数据。但是现在我需要一个(静态)优惠券表,其中包含十几个配置数据记录,以便在运行我的集成测试(rspec + capybara,而不是 cuke)时可供我的应用程序使用。

我的 rspec 测试有一个创建商店的 FactoryGirl 工厂。

在我的应用程序中,当商店由 init_store(coupon_code) 初始化时,会传入一个优惠券代码,用于打开/关闭各种功能(通过在优惠券表中查找该优惠券的设置)。

因此,当我创建 Store 工厂时,我还需要指定(通过 trait?)优惠券代码。然后,在我的模型中,初始化商店的方法将使用优惠券代码在优惠券表中查找一堆设置。(每张优惠券有大约 20 个属性可以打开/关闭各种商店功能。)

我的 coupons.yml 文件包含我的应用程序使用的实际优惠券表数据。现在我需要在运行测试时让它们对应用程序可用。(不要在意“脆”,这张桌子不会改变。)

没有使用带有 rspec 的固定装置或种子数据,我不确定如何/在哪里放置我的 coupons.yml 文件以及如何使优惠券“加载”到测试优惠券表中,以便在测试运行时它们可供我的应用程序使用.

我是否使用 coupons.yml 预填充种子数据?如果是这样,我怎样才能在每次测试运行时将其加载到我的测试数据库中?

或者,我应该使用固定装置吗?

无论哪种方式,coupons.yml 应该去哪里以及如何加载它(在商店工厂中?在其中一个规范中?在 specs_helper 中?)

当我搜索诸如“使用固定装置和工厂”或“使用带有 rspec 的种子数据”之类的东西时,我发现的只是“使用工厂”的建议,是的,我明白了。但是对于这种特殊情况,我需要两者,所以任何帮助将不胜感激。

4

1 回答 1

6

我做这样的事情,我使用种子而不是固定装置(尽管我相信你也可以使用固定装置)。

在 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加载种子数据。

希望对您有所帮助,如果您有任何问题,请告诉我。

于 2012-10-05T04:23:31.783 回答