在RSpec中为spec目录挂钩之前和之后

时间:2015-04-15 13:46:26

标签: ruby-on-rails ruby rspec

我们的RSpec测试套件中有相当多的测试。目录结构看起来像 -

spec/
  truncation/
    example1_spec.rb
    example2_spec.rb
    ...
  transaction/
    example1_spec.rb
    example2_spec.rb
    ...

我希望在运行transaction/文件夹中的所有规范文件之前恢复测试数据库转储,并在所有测试完成后将其清空。

有办法做到这一点吗?

before(:suite)after(:suite)个钩子,但这些钩子适用于各个规格文件。

有没有办法为RSpec中的目录提供前后挂钩?

1 个答案:

答案 0 :(得分:8)

您使用的是RSpec 3 +吗?

您可以使用#define_derived_metadata根据文件路径匹配器添加自定义元数据。

RSpec.configure do |config|
  config.define_derived_metadata(file_path: %r{spec/truncation}) do |metadata|
    metadata[:truncation] = true
  end

  config.before(:all, :truncation) do
    # truncate that bad boy
  end
end

这是rspec-rails中用于向特定目录中的规范添加自定义行为的same method,例如spec/controllers

Docs