我正在尝试使用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
任何人都知道我做错了什么?
答案 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 / 添加配置行只是为了保持一致。
希望有所帮助!