단일 RSpec 테스트를 실행하는 방법은 무엇입니까?
다음 파일이 있습니다.
/spec/controllers/groups_controller_spec.rb
해당 스펙 만 실행하기 위해 터미널에서 어떤 명령을 사용하며 어떤 디렉토리에서 명령을 실행합니까?
내 보석 파일 :
# Test ENVIRONMENT GEMS
group :development, :test do
gem "autotest"
gem "rspec-rails", "~> 2.4"
gem "cucumber-rails", ">=0.3.2"
gem "webrat", ">=0.7.2"
gem 'factory_girl_rails'
gem 'email_spec'
end
사양 파일 :
require 'spec_helper'
describe GroupsController do
include Devise::TestHelpers
describe "GET yourgroups" do
it "should be successful and return 3 items" do
Rails.logger.info 'HAIL MARRY'
get :yourgroups, :format => :json
response.should be_success
body = JSON.parse(response.body)
body.should have(3).items # @user1 has 3 permissions to 3 groups
end
end
end
사용 가능한 시간이 얼마인지 확실하지 않지만 실행 필터링을위한 Rspec 구성이 있으므로 이제이를 다음에 추가 할 수 있습니다 spec_helper.rb
.
RSpec.configure do |config|
config.filter_run_when_matching :focus
end
그리고 다음에 초점 태그를 추가 it
, context
또는 describe
해당 블록을 실행합니다 :
it 'runs a test', :focus do
...test code
end
RSpec 문서 :
보통 나는한다 :
rspec ./spec/controllers/groups_controller_spec.rb:42
어디 42
에서 실행하려는 테스트 라인을 나타냅니다.
편집 1 :
태그를 사용할 수도 있습니다. 여기를 참조 하십시오 .
편집 2 :
시험:
bundle exec rspec ./spec/controllers/groups_controller_spec.rb:42
갈퀴로 :
rake spec SPEC=path/to/spec.rb
(크레딧은 이 답변으로 갑니다 . 투표 해주세요.)
편집 (@cirosantilli 덕분에) : 사양 내에서 하나의 특정 시나리오를 실행하려면 설명과 일치하는 정규식 패턴 일치를 제공해야합니다.
rake spec SPEC=path/to/spec.rb \
SPEC_OPTS="-e \"should be successful and return 3 items\""
정규식을 spec 명령에 전달하면 it
지정한 이름과 일치하는 블록 만 실행 합니다.
spec path/to/my_spec.rb -e "should be the correct answer"
많은 옵션이 있습니다 :
rspec spec # All specs
rspec spec/models # All specs in the models directory
rspec spec/models/a_model_spec.rb # All specs in the some_model model spec
rspec spec/models/a_model_spec.rb:nn # Run the spec that includes line 'nn'
rspec -e"text from a test" # Runs specs that match the text
rspec spec --tag focus # Runs specs that have :focus => true
rspec spec --tag focus:special # Run specs that have :focus => special
rspec spec --tag focus ~skip # Run tests except those with :focus => true
특정 테스트를 실행하기 위해 선호하는 방법은 약간 다릅니다.
RSpec.configure do |config|
config.filter_run :focus => true
config.run_all_when_everything_filtered = true
end
내 spec_helper 파일로.
이제 하나의 특정 테스트 (또는 컨텍스트 또는 스펙)를 실행하려고 할 때마다 "focus"태그를 추가하고 정상적으로 테스트를 실행할 수 있습니다. 집중된 테스트 만 실행됩니다. 모든 포커스 태그를 제거하면 run_all_when_everything_filtered
정상적으로 모든 테스트가 시작되고 실행됩니다.
명령 행 옵션만큼 쉽고 빠르지는 않습니다. 실행할 테스트 파일을 편집해야합니다. 그러나 그것은 당신에게 훨씬 더 많은 통제권을줍니다.
@apneadiving 답변은 이것을 해결하는 깔끔한 방법입니다. 그러나 이제 Rspec 3.3에 새로운 방법이 있습니다. rspec spec/unit/baseball_spec.rb[#context:#it]
줄 번호를 사용하는 대신 간단히 실행할 수 있습니다. 여기 에서 찍은 :
RSpec 3.3은 예제를 식별하는 새로운 방법을 소개합니다 ...]
예를 들어 다음 명령은
$ rspec spec/unit/baseball_spec.rb[1:2,1:4]
… spec / unit / baseball_spec.rb에 정의 된 첫 번째 최상위 그룹에 정의 된 두 번째 및 네 번째 예 또는 그룹을 실행합니다.
그래서 그 대신 일의 rspec spec/unit/baseball_spec.rb:42
그것 (라인 42 테스트) 첫 번째 테스트이고, 우리는 간단하게 할 수있는 rspec spec/unit/baseball_spec.rb[1:1]
또는 rspec spec/unit/baseball_spec.rb[1:1:1]
테스트 케이스가 얼마나 중첩에 따라 달라집니다.
레일 5에서
이 방법으로 단일 테스트 파일을 실행했습니다 (모든 파일을 하나의 파일로)
rails test -n /TopicsControllerTest/ -v
클래스 이름을 사용하여 원하는 파일과 일치시킬 수 있습니다 TopicsControllerTest
내 수업 class TopicsControllerTest < ActionDispatch::IntegrationTest
출력 :
단일 테스트 방법과 일치하도록 정규식을 조정할 수 있습니다 \TopicsControllerTest#test_Should_delete\
rails test -n /TopicsControllerTest#test_Should_delete/ -v
rspec 2로 시작하면 다음을 사용할 수 있습니다.
# in spec/spec_helper.rb
RSpec.configure do |config|
config.filter_run :focus => true
config.run_all_when_everything_filtered = true
end
# in spec/any_spec.rb
describe "something" do
it "does something", :focus => true do
# ....
end
end
모델의 경우 5 번 라인에서만 실행됩니다.
bundle exec rspec spec/models/user_spec.rb:5
컨트롤러 : 라인 번호 5에서만 실행됩니다.
bundle exec rspec spec/controllers/users_controller_spec.rb:5
신호 모델 또는 컨트롤러의 경우 위의 라인 번호를 제거하십시오
모든 모델에서 사례를 실행하려면
bundle exec rspec spec/models
모든 컨트롤러에서 사례를 실행하려면
bundle exec rspec spec/controllers
모든 경우를 실행하려면
bundle exec rspec
rspec 2를 사용하는 rails 3 프로젝트에있는 경우, rails 루트 디렉토리에서 :
bundle exec rspec spec/controllers/groups_controller_spec.rb
분명히 작동해야합니다. 타이핑하는 데 지쳤으므로 '번들 exec rspec'을 'bersp'로 단축하는 별칭을 만들었습니다.
'bundle exec'는 gem 파일에 지정된 정확한 gem 환경을로드 할 수 있도록합니다 : http://gembundler.com/
Rspec2가 'spec'명령에서 'rspec'명령으로 전환되었습니다.
이 가드 젬을 사용하여 테스트를 자동 실행합니다. 테스트 파일에서 생성 또는 업데이트 작업 후 테스트를 실행합니다.
https://github.com/guard/guard-test
또는 일반적으로 다음 명령을 사용하여 실행할 수 있습니다
rspec 사양 / 컨트롤러 /groups_controller_spec.rb
다음과 같이 할 수 있습니다 :
rspec/spec/features/controller/spec_file_name.rb
rspec/spec/features/controller_name.rb #run all the specs in this controller
프로젝트의 루트 디렉토리에서 명령을 실행하십시오.
# run all specs in the project's spec folder
bundle exec rspec
# run specs nested under a directory, like controllers
bundle exec rspec spec/controllers
# run a single test file
bundle exec rspec spec/controllers/groups_controller_spec.rb
# run a test or subset of tests within a file
# e.g., if the 'it', 'describe', or 'context' block you wish to test
# starts at line 45, run:
bundle exec rspec spec/controllers/groups_controller_spec.rb:45
참고 URL : https://stackoverflow.com/questions/6116668/how-to-run-a-single-rspec-test
'IT' 카테고리의 다른 글
파이썬 클래스에서 메소드 목록을 어떻게 얻습니까? (0) | 2020.03.21 |
---|---|
Flask를 사용하여 URL에서 명명 된 매개 변수를 얻으려면 어떻게해야합니까? (0) | 2020.03.21 |
루비에 실제 멀티 스레딩이 있습니까? (0) | 2020.03.20 |
Office VBA 편집기에서 코드 블록 주석 처리 및 주석 해제 방법 (0) | 2020.03.20 |
Git을 사용하여 커밋 ID를 기반으로 특정 커밋으로 되 돌리시겠습니까? (0) | 2020.03.20 |