Rspec에서 특정 테스트 만 실행하려면 어떻게합니까?


159

주어진 레이블로 테스트 만 실행할 수있는 방법이 있다고 생각합니다. 아는 사람 있나요?

답변:


186

문서를 찾기는 쉽지 않지만 해시로 예제에 태그를 지정할 수 있습니다. 예 :

# spec/my_spec.rb
describe SomeContext do
  it "won't run this" do
    raise "never reached"
  end

  it "will run this", :focus => true do
    1.should == 1
  end
end

$ rspec --tag focus spec/my_spec.rb

GitHub에 대한 추가 정보 . (더 나은 링크를 가진 사람은 조언하십시오)

(최신 정보)

RSpec은 이제 여기에 훌륭하게 문서화되어 있습니다 . 자세한 내용은 --tag 옵션 섹션을 참조하십시오.

v2.6부터 이러한 종류의 태그는 구성 옵션을 포함하여 훨씬 간단하게 표현할 수 있습니다 treat_symbols_as_metadata_keys_with_true_values.

describe "Awesome feature", :awesome do

어디 :awesome그것 인 것처럼 처리됩니다 :awesome => true.

또한 '초점'테스트를 자동으로 실행하도록 RSpec을 구성하는 방법에 대해서는 이 답변 을 참조하십시오 . 이것은 Guard 와 특히 잘 작동합니다 .


따라서 검색 할 필요가 없습니다. zetetic의 제안에 대한 직접 링크는 여기 (Rspec 2.12) relishapp.com/rspec/rspec-core/v/2-12/docs/command-line/…
tir38

우리는 코드가 포커스와 병합되지 않도록 스위트에 사양을 추가했습니다. 여전히 소스 제어에 있습니다. gist.github.com/jwg2s/7361603
jwg2s

@ jwg2s git hook을 사용하여 커밋을 차단하여 :focus'binding.pry , console.log '와 같은 바람직하지 않은 코드가 코드베이스에 들어 가지 않도록합니다.
zetetic

1
@Otheus 아니오, 나는 단지 팬입니다 :) 나는 그들이 Relish에서 한 일을 정말로 좋아하지만 SO는 자체 문서 기능을 시작했기 때문에 경쟁이 발생할 수 있습니다.
zetetic

1
어쩌면 당신은 실제로 rspec프로그램 의 사용법과 실제 행동을 설명하는 문서 방식으로 나를 가리킬 수 있습니다 .
Otheus


90

당신의 spec_helper.rb:

RSpec.configure do |config|
    config.filter_run focus: true
    config.run_all_when_everything_filtered = true
end

그런 다음 사양에 :

it 'can do so and so', focus: true do
    # This is the only test that will run
end

다음과 같이 'fit'으로 테스트에 집중하거나 'xit'으로 제외 할 수도 있습니다.

fit 'can do so and so' do
    # This is the only test that will run
end

1
rspec 3.5에서는 예제 config.filter_run_when_matching에 추가하면 :focus됩니다.
Ali Ghanavatian

4
'focus : true'가 실수로 커밋 된 경우 대부분의 테스트를 실행하지 않아도 CI가 통과합니다.
zach

67

또는 줄 번호를 전달할 rspec spec/my_spec.rb:75수 있습니다.-줄 번호는 단일 사양 또는 컨텍스트 / 설명 블록을 가리킬 수 있습니다 (해당 블록의 모든 사양을 실행)


50

콜론과 함께 여러 줄 번호를 묶을 수도 있습니다.

$ rspec ./spec/models/company_spec.rb:81:82:83:103

산출:

Run options: include {:locations=>{"./spec/models/company_spec.rb"=>[81, 82, 83, 103]}}

이것은 너무 금입니다! 🙇🏾‍♂️
iGbanam

28

RSpec에 2.4으로 (내 생각) 당신은 앞에 추가 할 수 있습니다 f또는 xit, specify, describecontext:

fit 'run only this example' do ... end
xit 'do not run this example' do ... end

http://rdoc.info/github/rspec/rspec-core/RSpec/Core/ExampleGroup#fit-class_method http://rdoc.info/github/rspec/rspec-core/RSpec/Core/ExampleGroup#xit-class_method

config.filter_run focus: trueconfig.run_all_when_everything_filtered = true안에 있어야 합니다 spec_helper.rb.



3

또한 focus: true기본적으로 사양을 실행할 수 있습니다

spec / spec_helper.rb

RSpec.configure do |c|
  c.filter_run focus: true
  c.run_all_when_everything_filtered = true
end

그런 다음 간단히 실행

$ rspec

집중된 테스트 만 실행됩니다

그런 다음 focus: true모든 테스트 를 제거하면 다시 실행하십시오.

자세한 정보 : https://www.relishapp.com/rspec/rspec-core/v/2-6/docs/filtering/inclusion-filters


되어 spec/spec_helper.rb항상 포함? 또는 옵션이 제공되지 않은 경우에만? 테스트 모듈에 왜 require 'spec_helber'있고 위의 코드가 없으면 파일을 지정하여 단일 테스트를 실행할 가능성을 제거합니까? 이것에 대한 문서를 찾을 수 없습니다.
Otheus

1
spec_helper.rb프로젝트 루트 --require spec_helper.rspec있는 경우 항상 포함됩니다 .
Kris

0

로 실행할 수 있습니다 rspec spec/models/user_spec.rb -e "SomeContext won't run this".

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