그래서 나는이 간단한 루비 클래스가 있습니다인스턴스 변수에서 메소드를 스텁하는 방법은 무엇입니까?
class GetRequestList
def initialize(current_user, filter_hash)
@authorizer = RequestAuthorizer.new(current_user)
@filter = RequestFilter.new(filter_hash)
end
def generate
Request.send_chain(@authorizer.method_chain)
.send_chain(@filter.method_chain)
end
end
을 그리고 Request
이 RequestAuthorizer
및 RequestFilter
구현의 분리에서 두 send_chain
방법을 수신 테스트하려는. 이를 위해 일부 스텁을 사용하려고합니다.
require 'test_helper'
class GetRequestListTest < ActiveSupport::TestCase
test "request should be filtered by filter and role" do
Request.expects(:send_chain).twice.returns([build(:request)])
RequestFilter.stubs(:new)
RequestFilter.any_instance.stubs(:method_chain).returns([])
RequestAuthorizer.stubs(:new)
RequestAuthorizer.any_instance.stubs(:method_chain).returns([])
assert GetRequestList.new(:current_user, :filter).generate.size == 1
end
end
잘못된 것이 있습니다. stubs(:new)
은 nil
을 반환하며 인스턴스 변수 GetRequestList
에는 RequestAuthorizer
및 RequestFilter
의 인스턴스가 없으므로 오류가 발생합니다. 인스턴스 변수에서 메소드를 스텁하는 방법을 이해할 수 없습니다. 제안 사항이 있으십니까?
'초기화':'@ athorizer' 대'@ authorizer'에 오타가있는 것 같습니다. –
감사합니다. 질문이 남아 있습니다. – lompy