rspec mocks 2.11.3과의 호환성
3890 단어 rspec-spies
묘사
환경 변화와 호환성https://github.com/rspec/rspec-mocks/blob/a727464658e4c3f08dcff9c62814ade3c5852d73/lib/rspec/mocks/method_double.rb토론 #1
@jamesarosen의 다른 심사 제공:)토론 #2
@AlessandroBerardi 테스트를 진행하셨습니까?나는 그들로 하여금 이 지점을 통과하게 할 수 없다.나는 먼저 마스터와 그것을 합쳐야만 보석을 일할 수 있다.그러면 모든 테스트가 실패하고 다음 메시지가 나타납니다.1) [object.should] have_received(method, *args) matches if method is called with correct args
Failure/Error: @object.stub!(:slice)
NameError:
undefined local variable or method `visibility_for_method' for {:expectations=>[], :stubs=>[]}:RSpec::Mocks::MethodDouble
# ./lib/rspec-spies.rb:13:in `define_proxy_method'
# ./spec/rspec-spies_spec.rb:11:in `block (2 levels) in <module:Matchers>'
토론 #셋
@jamesarosen은 당신에게 불편을 끼쳐 드려서 깊은 사과의 뜻을 표합니다.나는 지금 이미 필요한 개혁을 추진했다.이 패치의 목적은 rspec의 최신 버전의 변화를 강조하는 것입니다. 이것은gem와 호환되지 않습니다.따라서 이 패치는 현재 상태에서 2.11.3 이전 rspec Mock 버전과 호환되지 않습니다.토론 #4
이 파일은 generated by Jeweler이기 때문에 직접 수정하지 마십시오.의존 관계의 변화는 우리에게 두 가지 선택을 남겼다.
1. 새로운 주요 버전의 rspec spies를 원형대로 병합하여 발표하려면
gemspec
2. 구버전과 새 버전의 rspec Mock과 함께 사용할 수 있도록 수정나는 우리가 후자가 되고 싶다는 것을 매우 확신한다.국부 변수로 정의할 필요가 있는지 확인하기 위해서
rspec-mocks ~>2.11.3
검사를 권장합니다.그렇게 지도 모른다, 아마, 아마...def define_proxy_method
return if @method_is_proxied
visibility_declaration = respond_to?(:visibility_for_method} ? visibility_for_method : "#{visibility} :#{method_name}"
object_singleton_class.class_eval <<-EOF, __FILE__, __LINE__ + 1
def #{method_name}(*args, &block)
__mock_proxy.record_message_received :#{method_name}, *args, &block
__mock_proxy.message_received :#{method_name}, *args, &block
end
#{visibility_declaration}
EOF
@method_is_proxied = true
end
2.11.3의 구체적인 해결 방안이 무엇인지 알고 싶습니다.내가 아는 바에 의하면, 네가 한 유일한 변화는1. 이미 했다면 조작금지로 한다.내가 보기에 이것은 오류 복구인 것 같아서 버전 호환성에 영향을 주지 않는다.
2. 행 번호에
respond_to?(:visibility_for_method)
를 추가합니다.이것은 버그 복구로 버전 호환성에 영향을 주지 않습니다.3.
1
를 국부 변수@method_name
에 저장하지 마십시오.이것은 내부 구현 디테일로 버전 호환성에 영향을 주지 않는다.4. 사용
method_name
방법나는 마지막으로 곤혹스러웠다.rspec mocks의 2.11.3에서 정의는 이전의 정의와 완전히 같다.문제는 다른 것이 그것을 새롭게 정의하고 있는데, rspec 스파이를 초제어에 복종시키려는 것입니까?만약 이것이 정말 유일한 문제라면, 우리는 이 방법을 스스로 정의하여 모든 사람이 2.11.3 호환 버전을 사용하도록 할 수 있다.
def define_proxy_method
return if @method_is_proxied
object_singleton_class.class_eval <<-EOF, __FILE__, __LINE__ + 1
def #{method_name}(*args, &block)
__mock_proxy.record_message_received :#{method_name}, *args, &block
__mock_proxy.message_received :#{method_name}, *args, &block
end
#{visibility_for_method}
EOF
@method_is_proxied = true
end
def visibility_for_method
"#{visibility} :#{method_name}"
end
visibility_for_method
@jamesarosen의 유일한 중요한 변화는 @method is proxied의 검사와 값을 도입하는 오류 복구(제1점)입니다.나는 느릿느릿 rspec mocks 2.11.3에서 코드를 얻었고, 이 코드를 추가해서 받은 소식을 기록했다.빠른 복구를 위해 사과드립니다. 추출 요청을 제출하기 전에 코드를 더 잘 검사해야 합니다.어쨌든 코드를 이전 상태로 복원하고 오류 복구(1점과 2점)를 추가하면visibility for 방법의 호환성 문제를 쉽게 극복할 수 있을 것이라고 믿습니다.
토론 #5
@AlessandroBerardi, 그렇게 할래요, 제가 할래요?기왕 우리가 여기에 있는 이상 포트토론 #6
로 돌아가도 무방하다. 그러면 우리는 의외로 다시 이 문제에 부딪히지 않을 것이다.visibility_for_method
gem와 관련된 제출을 복원했고 건의에 따라 뒷포트토론 #7
를 진행했습니다.규격이 통과 중이다.visibility_for_method
감사합니다:토론 #8
@jamesarosen 감사합니다!Reference
이 문제에 관하여(rspec mocks 2.11.3과의 호환성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://github.com/technicalpickles/rspec-spies/issues/14텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)