모델에서 콜백 존재 여부를 테스트 할 수 있습니다. 구체적으로는 after_create
또는 과 같이 레코드를 생성하여 트리거되는 콜백을 구체적으로 테스트 할 수 있습니까?ActiveRecord 콜백 테스트 있음
다음은 호출하는 (비어있는) 메소드가있는 콜백의 예입니다.
# app/models/inbound_email.rb
class InboundEmail < ActiveRecord::Base
after_commit :notify_if_spam, on: :create
def notify_if_spam; end
end
여기에 호출되는 방법은 이동하는 방법처럼 보인다 테스트 할 message expectation를 사용 RSpec에 3
# spec/models/inbound_email_spec.rb
describe InboundEmail do
describe "#notify_if_spam" do
it "is called after new record is created"
end
end
을 사용하여 보류중인 사양입니다. 예 :
expect(FactoryGirl.create(:inbound_email)).to receive(:notify_if_spam)
하지만 작동하지 않습니다. 또 다른 방법은 레코드가 생성 될 때 호출 된 메소드 내부에서 발생하는 일 (예 : 이메일 전송, 메시지 로깅)을 테스트하는 것입니다. 이것은 메소드가 호출되어 콜백이 존재 함을 의미합니다. 그러나 나는 그와 같은 해결책을 찾고 있지 않기 때문에 당신이 정말로 다른 것을 테스트하고 있기 때문에 부주의 한 해결책을 찾는다.
메시지 기대 효과가 좋지 않은 이유는 무엇입니까? –
@PhilipHallstrom 왜 내가 메시지의 기대를 싫어하는 것 같지 않은가요? 내 예제에서 언급했듯이 솔루션에는 메시지 예상이 포함될 것으로 생각됩니다. – Dennis
이 질문은 분명하지 않습니다. 메서드가 있는지 테스트하고 싶습니까? 아니면 콜백 호출 여부? – Substantial