这是我的一部分spec_helper.rb
:
RSpec.configure do |config| config.before(:each) do login(email, password) visit root_url end end
我需要的所有(20+)测试除了一个.
有没有办法避免单个测试执行before hook
?
您可以向不需要登录的测试添加元数据,然后在before
钩子中评估该元数据.
例如,在同一文件中进行两次测试.一个需要登录,一个不需要.
# foo_spec.rb describe Foo do describe "#bar" do it "needs to log in" do expect(1).to eq 1 end end describe "#baz" do it "needs to not log in", :logged_out do expect(1).to eq 1 end end end
所以我们在it
块中添加了元数据.接下来,我们配置before
钩子来评估示例的元数据.
config.before(:each) do |test| login(email, password) unless test.metadata[:logged_out] visit root_url end
现在,每个测试都会,visit root_url
但只有未标记的测试:logged_out
才会调用login
.
RSpec调用这些基于元数据的钩子过滤器.您可以在这里了解更多相关信息.