rspec에서 테스트 그룹을 비활성화 하시겠습니까?


103

나는 describes클래스와 그 안에 contexts다양한 it블록을 가진 다양한 테스트 사양 을 가지고 있습니다.

context일시적으로 비활성화 할 수있는 방법이 있습니까?

비활성화하고 싶은 항목의 pending "temporarily disabled"맨 위에 호출을 추가해 보았습니다 context. 사양을 실행할 때 보류에 대한 내용을 확인했지만 나머지 테스트를 계속 실행했습니다.

이것이 내가 가진 것입니다.

describe Something
  context "some tests" do
    it "should blah" do
      true
    end
  end

  context "some other tests" do
    pending "temporarily disabled"

    it "should do something destructive" do
      blah
    end
  end
end

그러나 내가 말했듯이 보류중인 전화 아래에서 테스트를 계속했습니다.

검색을 통해 rspec 작성자 (?)가 내가 실행중인 rspec 2에서 가능하다고 말하는 메일 링리스트 스레드 로 이동했습니다. 나는 그것이 작동했다고 생각하지만 다음 테스트를 모두 비활성화하는 원하는 효과가 없었습니다 pending. 전화 를 보았을 때 생각하는 것입니다 .

대안이 있습니까 아니면 내가 잘못하고 있습니까?

답변:


166

RSpec 3 을 사용하여 사양 트리를 비활성화하려면 다음을 수행 할 수 있습니다.

before { skip }
# or 
xdescribe
# or 
xcontext

출력에 표시 되는 skip 메시지를 추가 할 수 있습니다 .

before { skip("Awaiting a fix in the gem") }

RSpec에 2 :

before { pending }

1
정확히 블록에 그렇게 어떻게 갖는다 :describe 'XXXXX' do .... end
p.matsinopoulos

2
@ p.matsinopoulos 그냥 다음 줄에 추가하십시오 describe 'XXXXX' do. 매력처럼 일했습니다, 감사합니다 @Pyro!
chesterbr

필터보다 간단한 솔루션, +1
dolzenko 2013

사랑해. 맥주 빚 졌어!
Aldo 'xoen'Giambelluca

2
이거 좋은데. 출력에 표시되는 '건너 뛰기'뒤에 메시지를 포함 할 수도 있습니다.
Jan Hettich 2014

44

제외 필터를 사용 합니다 . 해당 페이지에서 : 귀하의 spec_helper.rb(또는 rails_helper.rb)

RSpec.configure do |c|
  c.filter_run_excluding :broken => true
end

테스트에서 :

describe "group 1", :broken => true do
  it "group 1 example 1" do
  end

  it "group 1 example 2" do
  end
end

describe "group 2" do
  it "group 2 example 1" do
  end
end

"rspec ./spec/sample_spec.rb --format doc"를 실행할 때

그러면 출력에 "group 2 example 1"이 포함되어야합니다.

그리고 출력에는 "그룹 1 예제 1"이 포함되지 않아야합니다.

출력에는 "그룹 1 예 2"가 포함되지 않아야합니다.


19

이것에 대해 어떻게 생각하는지보십시오 :

describe "something sweet", pending: "Refactor the wazjub for easier frobbing" do
  it "does something well"
  it "rejects invalid input"
end

"잠시 동안"무언가를 비활성화 할 때 보류중인 항목에 대한 이유를보고 싶습니다. 주석이나 제외 된 예제 / 파일에 묻히지 않고 정기적으로 표시되는 작은 주석 / TODO 역할을합니다.

또는 로 변경 it하는 것은 빠르고 쉽지만 해시 구성을 선호합니다. 모든 실행 문서를 제공하고 드롭 인 (설명 / 컨텍스트 /이를 변경하지 않으므로 나중에 다시 사용할 내용을 결정해야 함)이며 결정이 내려 지거나 차단기가 제거되면 쉽게 제거됩니다. .pendingxit

이것은 그룹 및 개별 예제에 대해 동일하게 작동합니다.


또한 설명에 대해 동일하게 작동하는지 확실하지 않지만 보류 중에는 실제로 테스트가 실행되고 테스트가 통과하기 시작하면 실패합니다. xdescribe (나는 xit와 같은 것 같아요)-그냥 실행하지 않습니다.
PL J

1
이것이 rspec 3.6.0에서 pending:및 모두에서 작동 함을 확인했습니다 skip:. 나에게 최고의 솔루션 인 것 같습니다. rspec3에서 보류 중은 여전히 ​​테스트를 실행하지만 실행 skip하지는 않습니다 (를 적용하더라도 skip).
jrochkind

9

다른 것. https://gist.github.com/1300152

xdescribe, xcontext, xit을 사용하여 비활성화하십시오.

최신 정보:

rspec 2.11부터 기본적으로 xit를 포함합니다. 그래서 새로운 코드는

# put into spec_helper.rb
module RSpec
  module Core
    module DSL
      def xdescribe(*args, &blk)
        describe *args do
          pending 
        end
      end

      alias xcontext xdescribe
    end
  end
end

용법

# a_spec.rb
xdescribe "padding" do
  it "returns true" do
    1.should == 1
   end
end 

3

설명 대신 보류를 사용하십시오. 블록이 다음과 같은 경우 :

context "some other tests" do
  it "should do something destructive" do
    blah
  end
end

다음과 같이 전체 블록을 건너 뛸 수 있습니다.

pending "some other tests" do
  it "should do something destructive" do
    blah
  end
end

1
describe "GET /blah" do

  before(:each) { pending "Feature to be implemented..." }

  it { expect(page).to have_button("Submit") }
  it { expect(page).to have_content("Blah") }
end

0

코드에서 무슨 일이 일어나고 있는지 설명하기 위해. 당신이 가지고있는 곳을 포함하여, 시작하는 동안 파일이로드 될 때 평가를 받고 실행됩니다. 그러나 테스트가 실행될 때 실행되어야합니다. 이것이 답변이 pending(RSpec 2) 또는 skip(RSpec 3)을 before블록에 넣도록 제안한 이유 입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.