2012-03-18 4 views
5

나는 이상한 행동이 계속되는 표준 Rails 3.2 앱을 가지고있다.Spails가 내 Rails 앱에서 정의되지 않은 메소드 오류를 일으 킵니까?

rspec spec/은 spork 실행없이 실행할 수 있으며 모든 테스트에는 아무런 문제가 없습니다.

그런 다음 나는 스포크를 발사하고 사양을 다시 실행합니다. 이번에는 내 우편물 중 하나를 건 드리면 모든 테스트는 동일한 오류와 함께 실패합니다

Failures: 

    1) InvitationsController GET accept with non-matching token should redirect to the root path 
    Failure/Error: let!(:invitation) { Factory :invitation } 
    NoMethodError: 
     undefined method `invite' for InvitationMailer:Class 
    # ./app/models/invitation.rb:29:in `send_email' 
    # ./spec/controllers/invitations_controller_spec.rb:5:in `block (3 levels) in <top (required)>' 

그런 다음, 그냥 모든 조금 괴상, 내가 또는 spork 실행하지 않고, 각각의 디렉토리 또는 사양을 실행할 수 있도록, 모든 것이 아무 문제없이 통과합니다. 예 : rspec spec/mailers 또는 rspec spec/models. 무슨 일 수

class InvitationMailer < ActionMailer::Base 
    default from: APP_CONFIG[:default_from] 

    def invite(invitation) 
    @invitation = invitation 

    mail(to: @invitation.recipient_email, subject: "the subject") 
    end 
end 

어떤 아이디어 : 여기

내가 정의되지 말했다되고하고있는 방법이다?

+0

@duckufuzz, 해결책을 찾았습니까? –

+1

아니요. 곧 응용 프로그램에서 spork 복용 계획입니다. 그것이 효과가있을 때 나는 spork를 좋아하지 만, 나는 그것을 단지 대부분의 시간 동안 믿을 수 없다는 것을 안다. –

+0

공장 및 테스트 코드가 없으면이 질문에 대답하기 어렵습니다. – Wes

답변

0

Spork를 조정하는 데 시간을 보낸 후에이 문제를 해결할 수 있다고 생각합니다.

어떤 이유로 Spork에서 InvitationMailer 파일을로드하지 않습니다. 따라서 할 수있는 한 가지는 Spork.each_run do 블록 내에 있어야합니다.

    Spork.prefork do 블록 내부에 require 'spork'을 제외하고 사양 도우미에서 모든 이동
  1. :

    또한, 여기에 내가 Spork 문제를 진단하는 데 사용한 과정이다. 오류가 없는지 확인하십시오. 얼마나 빨리 볼 수 time을 사용하십시오.

  2. 일부 코드를 Spork.each_run do 블록으로 이동하십시오.
  3. 오류가 발생하는지 확인하십시오. 테스트가 얼마나 빨리 실행되는지 보려면 time을 사용하십시오.
  4. 오류가 발생하는지 확인하십시오. 그렇다면 일부 코드를 pre_fork으로 다시 이동하십시오.
  5. prefork 블록에 있어야 할 항목과 그 처리 속도를 알아낼 때까지 계속 이동하십시오.

이 프로세스는 RailsCast에서 설명되었습니다.

관련 문제