RSpec에서 단일 테스트 / 스펙 파일을 어떻게 실행합니까?


282

예를 들어 편집중인 파일에 대해 단일 사양 파일의 테스트를 실행할 수 있기를 원합니다. rake spec모든 사양을 실행합니다. 내 프로젝트가 Rails 프로젝트 rake spec:doc가 아니므로 작동하지 않습니다.

이것이 중요한지 모르겠지만 여기에 내 디렉토리 구조가 있습니다.

./Rakefile
./lib
./lib/cushion.rb
./lib/ 쿠션
./lib/cushion/doc.rb
./lib/cushion/db.rb
./투기
./spec/spec.opts
./spec/spec_helper.rb
./spec/db_spec.rb

답변:


392

또는 레이크를 건너 뛰고 'rspec'명령을 사용할 수 있습니다.

rspec path/to/spec/file.rb

귀하의 경우 ./spec/db_spec.rb 파일에 적절한 도우미가 포함되어 있으면 제대로 작동합니다.

이전 버전의 rspec을 사용하는 경우 다음과 같습니다.

spec path/to/spec/file.rb

31
새로운 RSpec에 당신은 "RSpec에 / 대한 / 경로 file.rb"사용해야합니다
djburdick

3
어쩌면 내가 잘못하고 있지만 "bundle exec rspec path / to / spec / file.rb"
andrhamm

2
Rails를 사용하는 경우 빈 데이터베이스에서 시작하기 위해 Rake를 사용하여 사양을 실행하고 싶을 것입니다.
superluminary

@andrhamm, 번들의 맥락에서 스펙을 실행하고 있습니다. gemset을 사용하지 않는 경우 필요합니다 (rvm과 함께 기본 제공되며 rbenv의 별도 확장)
Caleb

6
하나의 테스트 만 실행하려면 테스트 시작 행 번호를 파일에 추가하십시오. 예 : rspec path / to / spec / file.rb : 455
runamok

201

원시 호출 :

레이크 스펙 SPEC = spec / controllers / sessions_controller_spec.rb \
          SPEC_OPTS = "-e \"쿠키로 로그인해야합니다 \ ""

이제 이것을 에디터에 포함시키는 방법을 알아 내십시오.


1
내가 말했듯이, 나는 레일에 있지 않으므로 컨트롤러가 없습니다. 그러나 "rake spec SPEC = file.rb"는 작동합니다. 감사! 저는 지금 Emacs 통합 작업을하고 있습니다.
Jonathan Tran

5
피할 수 있으면 레이크 파일을 시작하지 마십시오. 이 폭발 해 나이 소요
오리온 에드워즈에게

2
수락 된 답변을 변경했지만 SPEC_OPTS 매개 변수도 도움이되었습니다.
Jonathan Tran

2
이것이 제가 좋은 대답이라고 부르는 것입니다. 왜 "답변"으로 표시되지 않습니까?
gmile

1
직접 사양을 실행하는 것은 종종 최선의 선택,하지만 당신은 사용자 정의 Rakefile 다양한 마법 비트에 대한 레이크를 실행해야 할 때 많은 시간이있다
Nerdmaster

124

이 질문은 오래된 질문이지만 단일 테스트 실행 방법을 검색 할 때 Google 상단에 표시됩니다. 최근 추가인지는 모르겠지만 사양에서 단일 테스트를 실행하려면 다음을 수행하십시오.

rspec path/to/spec:<line number>

여기서-줄 번호-는 테스트의 일부를 포함하는 줄 번호입니다. 예를 들어 다음과 같은 사양이있는 경우

1: 
2: it "should be awesome" do
3:   foo = 3
4:   foo.should eq(3)
5: end
6:

그것이 spec / models / foo_spec.rb에 저장되었다고 가정 해 봅시다. 그런 다음 다음을 실행합니다.

rspec spec/models/foo_spec.rb:2

그리고 그것은 단지 하나의 사양을 실행할 것입니다. 실제로, 그 수는 2에서 5 사이의 숫자 일 수 있습니다.

도움이 되었기를 바랍니다!


스펙을 여러 파일로 리팩토링하면 작동하지 않는 것처럼 보이지만 흥미 롭습니다 (예 : 기본 _spec.rb 파일에서만 사용할 수 있지만 예제가 없으면 아무것도 실행되지 않습니다. 또한 최상위 사양 파일이 아닌 파일
에이

나는 잘 따르지 않습니다. "최상위 사양 파일"은 무엇을 의미합니까? 내 테스트 스위트는 항상 여러 파일로 나뉘어져 있으며 항상이 방법을 사용하여 단일 파일에서 테스트를 호출 할 수 있습니다. require다른 사양 파일 인 파일이 있다는 의미 입니까?
juanpaco

spec / 디렉토리 아래의 모든 레벨에서 모든 파일에서 사용할 수 있습니다. Trejkaz가 잘못되었다고 생각합니다.
Michael Durrant

7
이것은 굉장하고 위에 있어야합니다!
Tommaso Barbugli

4
나는 이것을 항상 사용하지만 때로는 하나의 파일에서 여러 테스트를 실행하려고합니다. 그러면 다음과 같이 모든 예를 입력 할 수 있습니다.rspec spec/models/foo_spec.rb:2:12:49
swilgosz

61

* e * xample 테스트 사례의 실제 텍스트를 -e!

그래서 :

it "shows the plane arrival time"

당신이 사용할 수있는

rspec path/to/spec/file.rb -e 'shows the plane arrival time'
./scripts/spec path/to/spec/file.rb -e 'shows the plane arrival time'

여기 갈퀴가 필요 없습니다.


@bandhunt에 명시된대로 "spec"을 "rspec"으로 대체해야한다는 점을 제외하고 필요한 모든 것입니다.
Nicolas Wormser

19

도움 (사양 -h)에서 :

-l, --line LINE_NUMBER           Execute example group or example at given line.
                                 (does not work for dynamically generated examples)

예 : spec spec / runner_spec.rb -l 162


3
최신 Rspec 버전 :에서는 문서와 콜론에 따라 콜론 뒤에 줄 번호를 추가합니다 .
dragon788

13

rspec을 gem이 아닌 플러그인으로 설치 한 경우 spec실행 파일 이 없습니다 .

어쨌든, 루비를 사용하여 파일을 실행하기 만하면됩니다. rspec 코드는 테스트를 수행 할만큼 영리합니다.

예 :

ruby myclass_spec.rb

2
파일 내에서 다음과 같이 하나의 테스트를 실행할 수 있습니까?
Ian Vaughan

12

http://github.com/grosser/single_test를 사용하면 다음과 같은 작업을 수행 할 수 있습니다.

rake spec:user          #run spec/model/user_spec.rb (searches for user*_spec.rb)
rake test:users_c       #run test/functional/users_controller_test.rb
rake spec:user:token    #run the first spec in user_spec.rb that matches /token/
rake test:user:token    #run all tests in user_test.rb that match /token/
rake test:last
rake spec:last

보석이 유지되지 않은 것 같습니다. 지난 커밋은 5 년 전이었습니다!
thegreendroid

10

Ruby 1.9.2와 Rails 3는 하나의 스펙 파일을 쉽게 실행할 수있는 방법을 제공합니다 :

  루비 -I spec spec / models / user_spec.rb

설명:

  • ruby 명령이 rake 명령
  • -I spec "파일을 찾을 때 'spec'디렉토리 포함"을 의미
  • spec/models/user_spec.rb 실행하려는 파일입니다.

추가 옵션으로 해당 파일 내에서 하나의 테스트를 실행할 수 있습니까?
Ian Vaughan

10

모든 rspec 파일 을 실행하려면rspec

참고 : 당신은 프로젝트의 루트에 있어야합니다

하나의 rspec 파일 을 실행하려면rspec 'path_to/spec.rb'

참고 : 'path_to / spec.rb'를 경로로 바꾸십시오. 따옴표는 선택 사항입니다.

하나의 파일에서 하나의 rspec 테스트 를 실행하려면rspec 'path_to/spec.rb:7'

참고 : : 7은 테스트가 시작되는 줄 번호입니다.


5

게시물이 오래되어 명령이 변경되어 이러한 예제 중 하나를 작동시키는 데 문제가 있었습니까?

주위를 파고 든 후에 나는 이것이 효과가 있음을 발견했다.

rspec 사양 / 모델 /user_spec.rb

단일 파일 만 실행하고 터미널에서 유용한 출력을 제공합니다.


이것은 허용 된 답변의 의견에서 언급되었습니다. 예,이 게시물은 너무 오래되어 명령 이름이 변경되었다고 생각합니다.
Jonathan Tran

4

specky.vim


3

또는 자동 테스트를 살펴보십시오.

명령 창에서 자동 테스트를 실행하면 스펙 파일을 저장할 때마다 스펙 파일이 실행됩니다. 또한 지정한 파일이 실행될 때마다 실행됩니다.

예를 들어 person_spec.rb라는 모델 사양 파일과 person.rb라는 모델 파일이 있으면 편집기에서 이러한 파일 중 하나를 저장할 때마다 사양 파일이 실행됩니다.


3

이 질문에 대해 많은 훌륭한 답변이 작성되었지만 Rspectags 접근법을 사용하는 사람 은 없습니다.

태그를 사용하여 다른 파일에서 하나 이상의 사양을 실행합니다. 현재 개발 작업과 관련된 사양 만 있습니다.

예를 들어 "dev"라는 태그를 "current"값으로 추가합니다.

it "creates an user", dev: :current do
  user = create(:user)
  expect(user.persisted?).to be_truthy
end

그런 다음 실행

bundle exec rspec . --tag dev:current

개별 사양 또는 그룹에서 다른 태그 / 값을 설정할 수 있습니다.


2

할 일을 만들기위한 테스트를 실행하고 있다고 가정하겠습니다. 아래와 같이 crete_spec.rb 파일을 사용하여 특정 할 일 사양 코드를 항상 실행할 수 있습니다.

      rspec/spec/features/controller/spec_file_name.rb

   Example:

   Creating  rspec spec/features/todos/create_spec.rb
   Editing   rspec spec/features/todos/edit_spec.rb
   Deleting  rspec spec/features/todos/destroy_spec.rb

모든 사양을 한 번에 실행하려면

   rspec 

특정 컨트롤러 사용자에서 모든 스펙을 실행하려면이 옵션을 사용하십시오.

  rspec/spec/feaures/controller_name

  Example:   rspec/spec/features/todos

더 이해하기를 바랍니다!

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