2012-03-18 8 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)>' 

すると、ちょうどそれがすべての少し奇妙にするには、私は、先割れスプーンの実行の有無にかかわらず、個々のディレクトリやスペックを実行することができますすべてが何の問題もありません。例えば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が大好きです。 –

+0

工場とテストコードがなければ、この質問に答えることは難しいです。 – Wes

答えて

0

時間をかけてSporkを調整した後、これを修正することは可能だと思います。

何らかの理由で、SporkがInvitationMailerファイルを読み込んでいません。したがって、あなたができることの1つは、Spork.each_run doブロック内に必要なことです。

    Spork.prefork doブロック内に require 'spork'以外のスペックヘルパーのすべてを移動し
  1. はまた、ここで私は先割れスプーンの問題を診断するために使用しているプロセスです。エラーがないことを確認してください。どのくらい速く表示するにはtimeを使用してください。

  2. 一部のコードをSpork.each_run doブロックに移動します。
  3. エラーが発生していないかどうかを確認してください。テストの実行速度を確認するには、timeを使用してください。
  4. エラーが発生するかどうかを確認してください。その場合は、コードをpre_forkに戻してください。
  5. preforkブロックに何が含まれている必要があり、どのくらい速く実行されるかを把握するまで動き続けてください。

このプロセスは、RailsCastで説明されています。

関連する問題