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를 원형대로 병합하여 발표하려면 gemspec2. 구버전과 새 버전의 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_methodgem와 관련된 제출을 복원했고 건의에 따라 뒷포트

토론 #7

를 진행했습니다.규격이 통과 중이다.visibility_for_method감사합니다:

토론 #8

@jamesarosen 감사합니다!

좋은 웹페이지 즐겨찾기