Rails 테스트 스위트에서 단일 테스트를 실행하는 방법은 무엇입니까?


답변:


158

참고 : 이 테스트는를 통해 실행되지 않습니다 rake. 따라서 가지고있는 코드는 Rakefile실행되지 않습니다.

단일 테스트를 실행하려면 rails 프로젝트의 기본 디렉토리에서 다음 명령을 사용하십시오.

ruby -I test test/unit/my_model_test.rb -n test_name

지정된 파일의 MyModelTest 클래스에 정의 된 "name"이라는 단일 테스트를 실행합니다. test_name은 테스트 이름 앞에 "test"라는 단어를 붙인 다음 밑줄로 단어를 구분하여 구성됩니다. 예를 들면 다음과 같습니다.

class MyModelTest < ActiveSupport::TestCase

  test "valid with good attributes" do
    # do whatever you do
  end

  test "invalid with bad attributes" do
    # do whatever you do
  end
end

다음을 통해 두 가지 테스트를 모두 실행할 수 있습니다.

ruby -I test test/unit/my_model_test.rb

그리고 두 번째 테스트를 통해

ruby -I test test/unit/my_model_test.rb -n test_invalid_with_bad_attributes

4
이것은 기능 또는 단위 테스트에서 작동하지 않습니다. 나는 얻는다 0 tests, 0 assertions, 0 failures, 0 errors. 레일 3.0.7.
B 세븐

10
나는 개인적으로 정규식 양식의 팬입니다 -n "/good/". 쉘 이스케이프는 항상 재미 있기 때문에 간단한 정규 표현식을 사용하는 경향이 있지만 항상 전체 테스트 이름을 작성하는 것보다 훨씬 쉽습니다.
Groxx

4
이것이 작동하려면 응답에 지정된 MAIN 디렉토리가 아니라 test/폴더 를 포함하는 서브 디렉토리에 있어야 합니다. 예를 들어, 테스트를 실행하려면 먼저 시작 activesupport/test/core_ext/array_ext_test.rb해야합니다 activesupport/.
Vincent B.

3
@Groxx-마지막으로 해결책! 감사합니다! -n "/good/"일했다.
B 세븐

2018+에서 이것을 조심하십시오. 조명기 데이터를 위해 로컬 데이터를 교환하고 다시 복원하는 것과 같이 많은 용도로 사용되는 레일에 내장 된 일부 테스트 작업 (db : test : prepare 등)을 무시합니다. 이것을 실행하면 로컬 데이터베이스가 사라졌습니다. stackoverflow.com/a/47006811/1154642 (나에게 도움이 됨) 와 같은 내장 레일 테스트 작업을 사용하는 솔루션을 고려하십시오 .
bryanbraun

99

테스트 파일을 실행하십시오 .

rake test TEST=tests/functional/accounts_test.rb

테스트 파일에서 단일 테스트 를 실행하십시오 .

rake test TEST=tests/functional/accounts_test.rb TESTOPTS="-n /paid accounts/"

(@Puhlze의 의견에서)


10
또한 주어진 파일에서 단일 테스트를 실행하려면 테스트에 전달 될 TESTOPTS 환경 변수를 추가 할 수 있습니다. EG 레이크 테스트 TEST = tests / functional / accounts_test.rb TESTOPTS = "-n / paid accounts /"
Puhlze

1
후자의 테스트 명령이 작동하지 않으면 시도하십시오 rake test TEST=tests/functional/accounts_test.rb TESTOPTS="-n '/paid accounts/'"( /paid accounts/작은 따옴표로
묶음


38

레일 5의 경우 :

rails test test/models/my_model.rb

9
그러나 이것은 파일의 모든 테스트 사례를 실행합니다. 질문은 단일 테스트를 실행하도록 요청합니다.
user000001

파일 이름에 줄 번호를 추가하여 단일 테스트를 실행할 수 있습니다.bin/rails test test/models/user_test.rb:27
Segfault

29

@James 덕분에 답은 다음과 같습니다.

rails test test/models/my_model.rb:22

22는 주어진 테스트의 줄 번호라고 가정합니다. 레일즈 도움에 따르면 :

 $ rails test --help

파일 이름에 줄 번호를 추가하여 단일 테스트를 실행할 수 있습니다.

    bin/rails test test/models/user_test.rb:27

또한 테스트가 ActionDispatch :: IntegrationTest에서 상속되어야합니다.

class NexApiTest < ActionDispatch::IntegrationTest
.
.
.

4
이것은 적어도 특정 라인을 테스트하기 위해 Rails 가이드를 기반으로하는 최상의 답변 인 것 같습니다.
tfantina


5

실제 Rails 제품군에서 단일 테스트를 실행하려면

bundle exec ruby -I"railties/test" actionpack/test/template/form_options_helper_test.rb

3

그것은 내 바보 같은 자정 문제였습니다. Rails는 실행중인 명령을 친절하게 인쇄합니다 rake test. 나머지는 잘라 붙여 넣기 운동입니다.

~/projects/rails/actionpack (my2.3.4)$ ruby -I"lib:test" "/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake/rake_test_loader.rb" "test/controller/base_test.rb"


2

단일 테스트를 실행하려면 일반 Ruby 스크립트로 실행하면됩니다.

ruby actionmailer/test/mail_layout_test.rb

cd디렉토리에 rake test들어가서 내부에서 실행하여 전체 제품군 (예 : ActiveRecord 또는 ActionMailer)을 실행할 수도 있습니다.


1
레일에 없음-최소한 기본 테스트 파일이 생성되지 않습니다. 첫 번째 줄에 'test_helper'가 필요하지만로드 경로가 제 시간에 설정되지 않았습니다. 모든 첫 번째 줄을 명시 적으로 요구 ( "File.join (File.dirname ( FILE ), '..', 'test_helper') 필요")로 변경하면 솔루션이 작동합니다.
James A. Rosen

ahem, thatsrequire File.join(File.dirname(__FILE__), '..', 'test_helper')
James A. Rosen

@Gaius 다시 확인했습니다. 첫 번째는 작동하지 않지만 cd-ing in은 작동합니다. 명확하게하기 위해 (이 글을 잘못 읽었는지 확실하지 않지만 "생성 된 테스트 파일"이라고 말한 경우) Rails 라이브러리가 아닌 Rails 프로젝트를위한 것입니다.
Aupajo 2009

2

내 상황 rake에서만 작동합니다 TESTOPTS="-n='/sample/'".

bundle exec rake test TEST=test/system/example_test.rb TESTOPTS="-n='/sample/'"

0

먼저 테스트하려는 lib의 폴더에 액세스 한 다음 (중요) :

~/Projects/rails/actionview (master)$ ruby -I test test/template/number_helper_test.rb 

0

레일즈 폴더

  bundle install
  bundle exec ruby -I"activerecord/test" activerecord/test/cases/relation/where_test.rb 

적절한 폴더를로드해야합니다 : "activerecord / test"(테스트 할 위치)

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