Minitest에서 공백으로 단일 테스트 실행

4137 단어 railsminitest
Rails에서 파일에 다른 테스트 없이 특정 테스트를 실행하려는 경우 메서드 이름을 --name 플래그에 전달할 수 있습니다.

def test_controller_name
  # assert ...
end

>  ruby -I test test/controller/renderer_test.rb --name test_controller_name


그러나 Rails는 테스트 이름과 블록을 사용하는 메서드test도 제공합니다.

test "creating from a controller" do
  # assert ...
end


공백이 포함된 문자열을 전달할 수 있는 이 테스트를 어떻게 실행합니까?

이를 위해 우리는 test 메서드 내부로 들어가서 무엇을 하는지 확인해야 합니다. test 메서드의 소스 코드를 열면 다음과 같이 됩니다.

def test(name, &block)
  test_name = "test_#{name.gsub(/\s+/, '_')}".to_sym
  defined = method_defined? test_name
  raise "#{test_name} is already defined in #{self}" if defined
  if block_given?
    define_method(test_name, &block)
  else
    define_method(test_name) do
      flunk "No implementation provided for #{name}"
    end
  end
end


첫 번째 줄은 name 문자열의 모든 공백을 밑줄_로 바꾸고 시작 부분에 test를 추가합니다. 따라서 테스트 이름creating from a controllertest_creating_from_a_controller가 됩니다. 그런 다음 메타프로그래밍을 사용하여 동일한 이름의 메서드를 정의합니다. 따라서 위의 테스트 방법은 다음과 같습니다.

def test_creating_from_a_controller
  # assert ...
end


이제 이름을 알았으므로 다음과 같이 이 테스트를 실행할 수 있습니다.

>  ruby -I test test/controller/renderer_test.rb -n test_creating_from_a_controller


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

좋은 웹페이지 즐겨찾기