2011-08-31 3 views
4

나는 순수 루비로 작성된 커맨드 라인 (NON-RAILS) 애플리케이션을 가지고 있으며 오이와 RSpec을 통해 몰아 낸다. lib, bin, spec 및 feature 디렉토리의 일반 응용 프로그램 계층을 따릅니다.RSpec을 사용하여 순수 Ruby bin/my_app.rb 애플리케이션을 테스트 하시겠습니까?

지금까지 필자는 실패한 오이 피쳐/시나리오를 작성하고 지원하는 lib 파일을 제거하기 위해 RSpec으로 내려간 다음 시나리오를 통과시키는 전통적인 프로세스를 따라갔습니다.

"bin/my_application.rb"의 주 응용 프로그램 시작 지점을 몰아 낼 때 불행히도 이것은 그리 밝지 않습니다. 필자가 가장 중요하게 생각하는 것은 RSpec의 클래스를 설명하지 않고 애플리케이션 클래스를 관리하고 명령 행 매개 변수와 옵션을 통해 초기화하는 루비 스크립트 다.

"bin/my_application.rb"는 명령 줄 옵션을 구문 분석하고 기본 응용 프로그램 클래스에 이니셜 라이저 옵션으로 전달하는 작은 쉘 실행 래퍼입니다. bin 스크립트의 동작 (예 : MyApp.should_receive (option_a) .with (매개 변수))을 테스트하고 싶습니다.

제안/생각/조언? 이것은 커맨드 라인 루비 스크립트 동작을 수행하기위한 일반적인 테스트 전략입니까?

미리 감사드립니다.

답변

4

당신이 묻고있는 것을 충분히 이해하고 있는지 확신 할 수 없지만 매개 변수 전달을 테스트하기 위해 RSpec을 사용하고 싶다면 쉽게 할 수 있어야합니다. 래퍼 스크립트가 있다고 가정 해 보겠습니다.

# my_application.rb 
command = Command.new 
command.foo = true if ARGV[0] 
command.bar = true if ARGV[1] 
command.baz = false if ARGV[2] 

command.make_dollars(1000000) 

그냥 섞어서 테스트에 적합한 클래스로 만듭니다.

# command_runner.rb 
class CommandRunner 
    def run(args, command = Command.new) 
    command.foo = true if args[0] 
    command.bar = true if args[1] 
    command.baz = false if args[2] 

    command.make_dollars(1000000) 
    end 
end 

# my_application.rb 
CommandRunner.new.run(ARGV) 

이제 시험이없는 유일한 것은 기본 run 명령에 대한 매개 변수 및 도움 파일 my_application.rb

희망의 한 줄입니다. Brandon

+0

command_runner.rb의'if args [0]'등으로하지 말아야합니까? – johnf

+0

죄송합니다. 당신 말이 맞아요. 어느 쪽이든 작동해야합니다 ... 고마워 주셔서 감사합니다. – bcarlso

관련 문제