4

私はいくつかのrspecテストを書いていますが、Mailerクラスにアクセスすると速度が低下することに気付きました。ActionMailer :: Baseクラスを完全にモックアウトして、電子メール配信の前後にコントローラーの他のコンポーネントをテストできるようにする方法はありますか?

これが私のメーラークラスの定義です

class OrganisationMailer < ActionMailer::Base
# code to send emails
end

これが私が書いたテストの1つです

require 'spec_helper'

describe OrganisationsController do

  describe "#email_single" do
    context "With email address" do 
      let(:org) {Organisation.make!}

      it "redirects to listing" do
        get :email_single, :id => org.id
        response.should redirect_to(organisations_path)
      end
    end
  end
end
4

1 に答える 1

1

含まれている小さなスニペットでこれに答えるのは難しいですが、コントローラーが送信するメッセージをスタブ化しOrganisationMailerて、そのロジックを実行する必要がないrspecの例では操作が行われないようにする必要があります。

OrganisationMailerまたは、次を使用してテストダブルに置き換えることもできますstub_const

stub_const("OrganisationMailer", my_test_double)

次に、コントローラーとメーラー間の相互作用を完全に制御できます。

于 2012-12-30T07:34:21.897 に答える