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

나는 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. 전화 를 보았을 때 생각하는 것입니다 .

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



답변

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

before { skip }
# or 
xdescribe
# or 
xcontext

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

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

RSpec에 2 :

before { pending }


답변

제외 필터를 사용 합니다 . 해당 페이지에서 : 귀하의 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″가 포함되지 않아야합니다.


답변

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

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

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

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

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


답변

다른 것. 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 


답변

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

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


답변

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


답변

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