저는 일부 rspec 테스트를 진행하고 있습니다. 이제는 내 초기화 매개 변수 중 하나가 "외국"클래스인데, 나는 그것이 어디서 왔는지 알지 못합니다. 그것은 사용하고있는 프레임 워크에서 주입됩니다. 내 코드에서는이 객체를 다양한 객체에 활용할 필요가 있지만, 주로 데이터를이 객체에 전달하는 메소드를 호출해야합니다 (데이터 추출 없음).RSpec이 객체의 모든 메소드를 조롱합니다.
개체를 완전히 조롱하여 특정의 정의되지 않은 메서드가 호출되는지 확인할 수 있습니까?
#an example of what this object could look like
let(:my_obscure_object) { RSpec.complete_mock } #NOTE: This does not work
...
it "verify .whatever method is called" do
expect(my_obscure_object).to receive(:whatever).with(some_data)
my_class.work
end
it "verify .sub_whatever method is called" do
expect(my_obscure_object.sub_thing).to receive(:sub_whatever).with(some_data)
my_class.work2
end
이 문제를 해결하기 위해 나는 현재 생각할 수있는 방법은 객체를 만들고이
#an example of a tedious method to solve my problem
let(:my_obscure_object) { Object.new }
before(:each) do
my_obscure_object.stub(:whatever) { nil }
my_obscure_object.stub(:whatever2) { nil }
my_obscure_object.stub(:whatever3) { nil }
my_obscure_object.stub(:whatever4) { nil }
my_obscure_object.stub(:whatever5) { nil }
ob = Object.new
ob.stub(:sub_whatever) { nil }
my_obscure_object.stub(:sub_thing) { ob }
end
...
it "verify .whatever method is called" do
expect(my_obscure_object).to receive(:whatever).with(some_data)
my_class.work
end
it "verify .sub_whatever method is called" do
expect(my_obscure_object.sub_thing).to receive(:sub_whatever).with(some_data)
my_class.work2
end
같은 내가해야 할 수도 있습니다 모든 단일 가능한 방법, 내 문제에 대한 해결책이 있습니까 스텁하는 것입니다? 다음과 같이
클래스가 "불분명"합니까? double 메소드에 입력 된 문자열의 의미를 찾기 위해 고생하고 있습니다. – Automatico
아니요. 'double'의 첫 번째 인수는 디버깅 목적으로 사용될 수있는 핸들입니다. 그것은 RSpec의 기능의 관점에서 무시됩니다. –
문서에서 발견되었습니다. 문자열은 단지 식별자 일뿐입니다. [참조 문서] (https://relishapp.com/rspec/rspec-mocks/docs) – Automatico