2015-01-09 6 views
4

Rspec을 사용하면 테스트 태그로의 존재 여부를 기반으로 설정을 쉽게 구성 할 수 있습니다.특정 Rspec 태그에 대한 설정을 어떻게 건너 뛸 수 있습니까?

# some_spec.rb 
describe "in a parallel universe", alter_spacetime: true do 
    # whatever 
end 

# spec_helper.rb 
RSpec.configure do |config| 
    config.before(:each, :alter_spacetime) do |example| 
    # fancy magic here 
    end 
end 

하지만 반대하고 싶지 : 몇 가지 테스트를 만들 수있는 평행 우주를 필요로하는 경우 예를 들어, (당신이 그렇게하는 코드를 가지고 가정) "각 시험 전에 당신은이 태그를 참조하지 않는 다음을 수행하십시오 ... "

어떤 테스트에서 태그가 있는지를 기초로 spec_helper의 설치 단계를 건너 뛸 수 있습니까? 처음에는

답변

5

, 당신은 뭔가

RSpec.configure do |config| 
    config.before(:each, alter_spacetime: false) do |example| 
    # fancy magic here 
    end 
end 

처럼 그런 식으로 일을 기대하지만, 그렇지 않습니다.

exampleExample 인스턴스이고 #metadata 메서드를 가지고 있으며 Metadata 개체를 반환합니다. 플래그로 값을 확인할 수 있으며 특정 예제의 플래그는 describe 블록에있는 플래그보다 우선합니다.

config.before(:each) do |example| 
    # Note that we're not using a block param to get `example` 
    unless example.metadata[:alter_spacetime] == false 
    # fancy magic here 
    end 
end 
+0

흠. 이 설정을 사용하면 기존의 태그 지정되지 않은 사양에서 설정을 수행 할 것으로 기대됩니다. 그러나 그들은 그렇지 않습니다. 그것을하기 위해서는'alter_spacetime : false'라고 태그를 붙여야합니다. 'before (: each, alter_spacetime : nil)'은 동일합니다. –

+0

@NathanLong 의견을 보내 주셔서 감사합니다. 이 변종은 그리 환상적이지는 않지만 작동해야합니다. 희망, 더 우아한 방법이 그것을 할 수 있습니다. =) –

+2

나는 약간의 수정 작업 후에도 당신의 대답을 편집했는데, 이것은 나에게 잘 맞았고 나는 충분히 우아하다고 생각한다. 감사! :) –

관련 문제