면책 조항 : 일반적으로 RSpec 및 TDD를 처음 사용하므로 완전히 잘못된 방식으로 진행될 수 있습니다.RSpec 함수에서 초기화 된 객체에 대해 any_instance 스텁 (stubbing)
내 프로그램에 명령을 입력하고이를 처리 할 클래스를 생성하는 명령 행 인터페이스를 작성하고 싶습니다. 프로그램이 작동하도록 의도 된 방법은 git 및 svn과 같은 도구와 유사합니다. 즉 "srs init"을 사용하여 프로그램을 초기화하고 "srs add"를 사용하여 프로그램에 무언가를 추가 할 수 있습니다.
그래서 나는 ARGV를 받아 다음과 같습니다 특정 핸들러에를 전달하는 클래스가 :
다음과 같을 것이다class CLI
def run!(*arguments)
command = arguments.shift
case command
when "init"
CLI::Init.new.run!(*arguments)
end
end
end
내 초기화 핸들러 :
class CLI
class Init
def initialize()
end
def run!(*arguments)
end
end
end
I CLI 클래스의 라우팅 기능을위한 테스트 슈트를 작성하려고합니다. 나는 다음과 같은 사용하는 경우 RSpec에 실패 :
내가 초기화 핸들러의 실행에 직접 호출CLI::run!
에 전화를 교체 할 경우 통과 그러나
describe CLI do
it "should launch the Init handler if we pass init" do
CLI::Init.any_instance.should_receive(:run!)
CLI::run!(*["init"])
end
end
; any_instance 만 describe
블록 내에서 구성 정의 인스턴스/작동,하지만 난 정말 모르겠어요 것처럼 i.e.:-
describe CLI do
it "should launch the Init handler if we pass init" do
CLI::Init.any_instance.should_receive(:run!)
CLI::Init.new.run!(*[])
end
end
것 같습니다. 누구든지 나에게 내 run!
함수 내에서 구축 된 인스턴스에서 클래스 메서드가 호출되었는지 또는 처음부터이 기능을 테스트하는 더 좋은 방법으로 호출되었는지 확인할 수있는 방법에 대한 지침을 제공 할 수 있다면 가장 좋습니다.
어떻게 실패합니까? 추적을 보여줄 수 있습니까? 언뜻보기에는 코드가 괜찮아 보입니다. – x1a4
@ x1a4 님, 귀하의 의견을 읽은 후 다시 한 번 보았습니다. 나는이 게시물에 대한 코드를 단순화했고, 단순화 된 코드는 정상적으로 작동한다. 게시하기 전에 같은 방식으로 실패했는지 테스트해야했다. 8 시간 한도가 만료되면 문제가 무엇인지 설명하는 답변을 게시합니다. – danielpwright