モジュールをメーラーにミックスし、ビューでアクセスできるようにヘルパーとして追加しています。ビューから適切なヘルパーメソッドが呼び出されていることをテストする必要があります(追跡ピクセルが電子メールに含まれるようにするため)が、Rspecが機能していないようです:
require "spec_helper"
describe DeviseOverrideMailer do
before :each do
# Make the helper accessible.
# This approach does not work
# class MixpanelExposer; include MixpanelFacade end
# @mixpanel = MixpanelExposer.new
# This approach also does not seem to work, but was recommended here: http://stackoverflow.com/questions/10537932/unable-to-stub-helper-method-with-rspec
@mixpanel = Object.new.extend MixpanelFacade
end
describe "confirmation instructions" do
it "tells Mixpanel" do
# Neither of these work.
# DeviseOverrideMailer.stub(:track_confirmation_email).and_return('')
@mixpanel.should_receive(:track_confirmation_email).and_return('')
@sender = create(:confirmed_user)
@email = DeviseOverrideMailer.confirmation_instructions(@sender).deliver
end
end
end
メーラー:
class DeviseOverrideMailer < Devise::Mailer
include MixpanelFacade
helper MixpanelFacade
end
モジュール:
class MixpanelFacade
def track_confirmation_email
# Stuff to initialise a Mixpanel connection
# Stuff to add the pixel
end
end
メーラービュー(HAML):
-# Other HTML content
-# Mixpanel pixel based event tracking
- if should_send_pixel_to_mixpanel?
= track_confirmation_email @resource
エラー:Mixpanel接続を適切に初期化できない(リクエストヘルパーがないため)と文句を言います。これは、.should_receive()がtrack_confirmation_email()メソッドを正しくスタブアウトしていないことを示しています。どうすれば正しくスタブアウトできますか?