在套件挂钩之前使用带有标签的RSpec

时间:2012-02-06 10:16:24

标签: ruby-on-rails-3 capybara rspec2

我正在尝试使用Rspec before(:suite)钩子和一个像这样的标签:

  config.before(:suite, :selenium => true) do
    #magical awesomeness
  end

但是Rspec似乎不尊重标签并运行我只想运行的代码:selenium =>无论如何都是如此。

奇怪的是,我正在做一个非常类似的事情:每个钩子也似乎工作正常:

  config.around(:each, :selenium => true) do |example|
    Capybara.using_wait_time(10) do
      Capybara.using_driver(:selenium) do
        example.run
      end
    end
  end

任何人都知道我做错了什么?

2 个答案:

答案 0 :(得分:3)

这应该有效:

if config.inclusion_filter[:selenium]
  config.before(:suite) do
    #magical awesomeness
  end
end

答案 1 :(得分:2)

我没有深入研究它,但我的猜测是:套件范围可以在解释任何标签之前运行。据我所知,你只需要一个:套件(尽管我可以在你的例子中看到它的使用)。我认为之前可以做一件事:所有这些都会做同样的事情,只要你把它设得足够高,就像你的spec_helper.rb中所说的那样?

== EDIT ==

所以我想到了更多,而解决方案就是这样的:

# spec_helper.rb
# run with the tag :selenium => true when you set your env var RUN_SELENIUM like so:
# %> RUN_SELENIUM=1 bundle exec rspec spec/
config.filter_run_excluding :selenium => true if ENV['RUN_SELENIUM'].nil?

# now your before suite hook can be something along the lines of
config.before(:suite) do
  if ENV['RUN_SELENIUM'].nil?
    ## regular awesomeness
  else
    ## magical awesomeness
  end
end

我使用guard和guard-spec处理标签也做了类似的事情。当然,您可以使用不带filter_run_excluding的env var,它将与以下内容相同:     %GT; RUN_SELENIUM = 1 bundle exec rspec --tag selenium spec / 添加配置行只是为了保持一致。

希望有所帮助!