Ruby on Rails 애플리케이션에서 rSpec을 사용하여 관찰자를 어떻게 테스트 하시겠습니까?

StackOverflow https://stackoverflow.com/questions/33048

문제

Ruby on Rails 애플리케이션 중 하나에 ActiveRecord :: Observer가 있다고 가정합니다. rSpec으로이 관찰자를 어떻게 테스트합니까?

도움이 되었습니까?

해결책

당신은 올바른 길을 가고 있지만 rSpec, 옵저버 및 모의 객체를 사용할 때 예기치 않은 메시지 오류가 많이 발생했습니다. 모델을 사양 테스트 할 때 메시지 예상에서 관찰자 동작을 처리 할 필요가 없습니다.

귀하의 예에서는 관찰자가 무엇을할지 알지 못하는 상태에서 모델에 "set_status"를 지정하는 좋은 방법이 없습니다.

그러므로 "No Peeping Toms "플러그인. 위의 코드와 No Peeping Toms 플러그인을 사용하는 경우 다음과 같이 모델을 지정합니다. 라코 디스

당신의 가치를 방해 할 관찰자가 있다는 걱정없이 모델 코드를 지정할 수 있습니다. 다음과 같이 person_observer_spec에서 별도로 지정합니다. 라코 디스

정말로 결합 된 Model 및 Observer 클래스를 테스트하고 싶다면 다음과 같이 할 수 있습니다. 라코 디스

99 %의 경우 관찰자가 꺼진 상태에서 사양 테스트를하는 것이 좋습니다. 그렇게하는 것이 더 쉽습니다.

다른 팁

면책 조항 : 실제로 프로덕션 사이트에서이 작업을 수행 한 적이 없지만 모의 객체, should_receive 및 친구를 사용하고 관찰자에서 직접 메서드를 호출하는 것이 합리적인 방법 인 것 같습니다

다음 모델 및 관찰자 제공 : 라코 디스

이렇게 사양을 작성합니다 (실행했고 통과했습니다) 라코 디스

no_peeping_toms는 이제 보석이며 여기에서 찾을 수 있습니다. https://github.com/patmaddox/ no-peeping-toms

관찰자가 올바른 모델을 관찰하고 예상대로 알림을 받는지 테스트하려면 다음은 RR을 사용하는 예입니다.

your_model.rb : 라코 디스

your_model_observer.rb : 라코 디스

your_model_observer_spec.rb : 라코 디스

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top