MiniTest에서 단일 테스트를 실행할 수 있습니까?


168

다음을 사용하여 모든 테스트를 단일 파일로 실행할 수 있습니다.

rake test TEST=path/to/test_file.rb

그러나 해당 파일에서 하나의 테스트 만 실행하려면 어떻게해야합니까?

비슷한 기능을 찾고 있습니다.

rspec path/to/test_file.rb -l 25

3
팔년 이상 및 레일 5+ 사용자에 대한 rails test path/to/test_file.rb:25참조 @Derek_Hill ANS -에서 가져온 guides.rubyonrails.org/testing.html#the-rails-test-runner
notapatch

답변:


44

rspec path / to / file.rb -l 25와 유사한 기능을 찾고 있습니다.

예! Nick Quaranto의 "m"gem을 사용하십시오 . 그것으로 당신은 말할 수 있습니다 :

m spec/my_spec.rb:25

4
대답은 효과가 있고 정확히 요청 된 내용이지만 :-) 단일 테스트를 실행하는 미니 테스트 방법은 이름 일치입니다 (Grmm 씨의 답변 참조). 이것을 시도하고 거부했다면 Nick 's Gem과 같은 비표준 대안을 시도 할 때입니다.
notapatch

3
사실, 동의합니다. 실제로 m을 옵션으로 -n에 전달하거나 MiniTest가 방금 줄 번호와 메소드 이름을 사용하여 지원했으면 좋겠다.
Elliot Winkler


이 gem은 rspec 방식으로 단일 테스트를 실행하는 것과 비슷하지만 Minitest에는 정확히 하나의 테스트를 실행하는 기본 제공 방법이 있습니다. 종속성이 필요하지 않습니다. 그것은 좋은 그 (많은 주위가있을 수 있습니다 같은) 액세서리 보석으로 쉽게 할 수 알고하지만 난이 질문에 대한 jduan 또는 randomor에서와 같은 순수한 minitest의 답변이 더 잘 맞는 것이라고 생각
cefigueiredo

209

명령은 다음과 같아야합니다.

% rake test TEST=test/test_foobar.rb TESTOPTS="--name=test_foobar1 -v"

6
+1-이것은 당신이하고 싶은 일입니다. 특정 파일의 모든 테스트를 테스트하려면, 단지 떠나 TESTOPTS=...멀리
awenkhh

매우 유용한 답변입니다. 테스트 보고서 끝에 실패한 테스트의 재실행 명령을 표시하도록 MinitestReporter를 만듭니다. 참조 : gist.github.com/foton/141b9f73caccf13ccfcc
Foton

1
무엇을 -v합니까?
존 슈나이더

149

시도해 보셨습니까?

ruby path/to/test_file.rb --name test_method_name

10
다음과 같이 정의 된 Minispec을 사용한 테스트는 specify {}어떻습니까? 그것들은 단지 test_0001_anonymous... 로 나타나고 test_0001_anonymous동일한 구문이 다중 디스크립션 블록에 사용되면 여러 가지가있을 수 있습니다 ...이 종류의 환경에서 단일 테스트를 실행하기위한 제안?
neezer

1
"tc"는 "테스트 케이스"를 나타냅니다.
앤드류 그림

4
라고 말합니다 cannot load such file -- test_helper.
x-yuri

11
stackoverflow.com/a/15714985/327786ruby -Itest path/to/tc_file.rb --name test_method_name 처럼 사용
TlmaK0

bundle exec ruby -I lib path/to --name test_fit
puchu


49

이것은 string name definition테스트에서 나를 귀찮게하는 것 중 하나입니다 .

당신이 가지고 있을때:

def test_my_test
end

테스트 이름을 항상 알고 있으므로 다음과 같이 실행할 수 있습니다.

ruby my_test -n test_my_test

그러나 다음과 같은 것이있을 때 :

it "my test" do
end

이 테스트의 이름이 실제로 내부적으로 어떻게 지정되는지 확실하지 않으므로 -n옵션을 직접 사용할 수 없습니다 .

이 테스트의 이름이 내부적으로 어떻게 지정되는지 알려면 옵션 만 있습니다. 전체 파일을 실행하여 로그를 살펴보십시오.

내 해결 방법은 다음과 같이 매우 독창적 인 테스트 이름에 무언가를 추가하는 것입니다.

it "my test xxx" do
end

그런 다음 '-n'매개 변수 의 RegEx 버전 을 사용하십시오 .

ruby my_test.rb -n /xxx/

6
-n 매개 변수의 정규식 버전은 정보의 클러치 조각이었습니다. 감사합니다!
Woahdae

__method__현재 실행중인 메소드 (이 경우 테스트)의 컨텍스트 내에서 호출 하여 이를 확인할 수 있습니다 . 본 구현은 다음과 같은 결과를 낳는다 "does not break my stuff".gsub(" ", "_").prepend("test_"). 그런 다음 예를 들어을 실행하십시오 ruby -Itest test/integration/stuff_flow_test.rb --name test_does_not_break_my_stuff.
TK-421


23

이것을 사용하여 단일 파일을 실행할 수 있습니다.

rake test TEST=test/path/to/file.rb

나는 또한 사용했다

ruby -I"lib:test" test/path/to/file.rb

더 나은 디스플레이를 위해.


12

두 가지 방법이 있습니다.

  1. '수동으로'테스트를 실행하십시오 (Andrew Grimm의 답변 참조).
  2. Rake::TestTask다른 테스트 로더를 사용하도록 대상을 해킹하십시오 .

Rake::TestTask(rake 0.8.7부터) 이론적 MiniTest::Unit으로 "TESTOPTS=blah-blah"명령 줄 옵션 을 사용하여 추가 옵션을 전달할 수 있습니다 .

레이크 테스트 % TEST = test / test_foobar.rb TESTOPTS = "-name test_foobar1 -v"

실제로 --name내부 (rake internals) 때문에 옵션 (테스트 이름에 대한 필터)이 작동하지 않습니다. 이를 해결하려면 Rakefile에 작은 원숭이 패치를 작성해야합니다.

# overriding the default rake tests loader
class Rake::TestTask
  def rake_loader
    'test/my-minitest-loader.rb'
  end
end

# our usual test terget 
Rake::TestTask.new {|i|
  i.test_files = FileList['test/test_*.rb']
  i.verbose = true 
}

이 패치는 파일을 생성해야합니다 test/my-minitest-loader.rb:

ARGV.each { |f|
  break if f =~ /^-/
  load f
}

Minitest에 가능한 모든 옵션을 인쇄하려면 다음을 입력하십시오.

% ruby ​​-r minitest / autorun -e ''---help

3
초기 예제는 최신 rake(0.9.2)에서 올바르게 작동 하며 원숭이 패치가 필요하지 않습니다.
혼란

1
레이크 버전 10.5.0으로 시도하면 TESTOPTS="--name test_foobar"작동하지 않지만 작동 TESTOPTS="--name=test_foobar"합니다.
kangkyu

11

--name이름 또는 이름 내의 숫자로 테스트를 실행하도록 전달할 수 있습니다 .

-n, --name PATTERN               Filter run on /regexp/ or string.

예 :

$ ruby spec/stories/foo_spec.rb --name 3

FAIL (0:00:00.022) test_0003_has foo
Expected: "foo"
Actual: nil

이 플래그는 Minitest의 README에 문서화 되어 있습니다.


1

Turn gem을 minitest와 함께 사용하는 경우 Turn.config.patternTurn Minitest 러너는 ARG의 --name 옵션을 고려하지 않으므로 option을 사용해야합니다.


이것이 턴이 name옵션 을 삼킨 것임을 깨달아야 할 힌트였습니다 . 감사! 턴이 더 이상 유지되지 않기 때문에, 나는 가장 작은 기자로 이주 할 계획이다
pdobb

1

비슷한 기능을 찾고 있습니다.

rspec 경로 /to/test_file.rb -l 25

정확히 그렇게하는 보석이 있습니다 : minitest-line.

gem install minitest-line
ruby test/my_file -l 5

에서 https://github.com/judofyr/minitest-line#minitest-line


안녕하세요 @ChrisHough, 정확히 작동하지 않는 것을 설명 할 수 있습니까 (예 : 오류 메시지)? 가장 작은 라인 젬의 목적은 MiniTest에서 단일 테스트를 실행하는 것입니다. 작동하지 않으면 최소 라인에서 버그를 발견했을 수 있습니다.
knugie

1

나는 사용한다 ruby /path/to/test -n /distinguishable word/

편집 : -n의 줄임말입니다 --name. distinguishable word테스트 설명에 넣은 문자열이 될 수 있습니다. 일반적으로 다른 테스트 설명에는 표시되지 않는 임의의 단어를 사용합니다.


더 자세히 설명해 주시겠습니까? 그 -n매개 변수는 무엇을 의미합니까?
니코 하세

에 대한 속기입니다 --name. 편리한 것입니다. / regex /에 특히 유용합니다. 나는 보통 임의의 단어를 테스트 이름에 넣습니다 (다른 테스트 설명에는 나타나지 않음).
sloneorzeszki

1
댓글 섹션이 아닌 답변 자체에 대한 설명을 추가하십시오.
Nico Haase

0

다음은 작동합니다

def test_abc
end

test "hello world"
end

이것은 다음에 의해 실행될 수 있습니다

bundle exec ruby -I test path/to/test -n test_abc

bundle exec ruby -I test path/to/test -n test_hello_word

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