오늘 조금 해맸던 부분 정리
이 테스트는 model 단계 테스트에서 사용하기 좋다.
더 복잡한 상위 단계에서 하게 되면, 테스트에서 해당 instance가 어떤 message를 받았는지 ( 어떤 함수를 호출했는지 ) 가 확실하지 않게 된다. 항상 테스트에서 should_receive 함수가 호출되기 전에 선언해야 한다. 가장 먼저 받는 message (함수)를 테스트할 때, 확실한것 같다. controller단계에서는 잘 테스트가 되지 않는다.
약간 내용을 정정 하자면, 테스트에서 사용되는 인스턴스와 실제 코드의 인스턴스가 같아야 한다.
모델을 직접 사용하는 경우는 괜찮으나, 인스턴스를 가져오는 경우, 테스트와 실제코드가 인스턴스가 다르다. 이유는 실제코드에서는 매번 내부적으로 find함수를 통해서 새로 가져오기 때문이다.
user.should_receive(:update_attribute)
: user instance는 update_attribute함수를 호출하게 됨.
user.should_receive(:update_attribute).once
: user instance는 update_attribute함수를 한번만 호출하게 됨.
* 주의 사항 : 이 걸 사용했을 경우, 해당 함수 리턴값이 nil이 된다. return값이 테스트에
필요한 경우, 반드시 and_return함수를 사용해서 return값을 지정한다.
user.should_receive(:update_attribute).and_return(true)
: user instance는 update_attribute함수를 호출하고, true를 return함. ( 이는 결과를 테스트 하는 것이 아니라, 테스트 중 실행결과에 상관없이 true를 return하게 함.
사실 많은 책에서 언급되었던 것인데, 이제 와서 확인 할 수 있었다.
rspec 2.6부터 any_instance가 추가된 관계로 find를 stub할 필요가 없어졌다.
사실 많은 책에서 언급되었던 것인데, 이제 와서 확인 할 수 있었다.
rspec 2.6부터 any_instance가 추가된 관계로 find를 stub할 필요가 없어졌다.



