我有要求覆蓋ActionMailer的mail
方法。這種方法被保護,因此在子類中,我還定義了mail
方法保護:試圖避免在電子郵件地址以「.old」結尾時發送電子郵件
protected
def mail(headers={}, &block)
#add a check to avoid sending emails that end with ".old"
unless headers[:to] =~ /\.old$/
super(headers, &block)
end
end
這樣,當外發的電子郵件地址與.old
結束時,方法應該返回零,而不是發送電子郵件。
然而,在我的單元測試,似乎電子郵件仍然會ActionMailer::Base.deliveries
這裏是我的單元測試:
describe 'BaseNotifier' do
class TestNotifier < BaseNotifier
def mailer(to, from, subject)
mail(:to => to,
:from => from,
:subject => subject)
end
end
before(:each) do
ActionMailer::Base.delivery_method = :test
ActionMailer::Base.perform_deliveries = true
ActionMailer::Base.deliveries.clear
end
it "should not send emails to a user with an email that ends in '.old'" do
TestNotifier.mailer("[email protected]", "[email protected]", "test email").deliver
puts "what do we have here " + ActionMailer::Base.deliveries.first.to_s
ActionMailer::Base.deliveries.length.should == 0
end
end
我創建了一個測試類和子類,其中郵件重寫(這是它將如何在系統中使用)。然後我發一封電子郵件,並致電.deliver
方法。
更新:我認爲交付方法不是問題。當我這樣做時:puts TestNotifier.mailer("[email protected]", "[email protected]", "test email")
我收到了與以下相同的電子郵件。我也試着重寫郵件方法是這樣的:
def mail(headers={}, &block)
#add a check to avoid sending emails that end with ".old"
unless headers[:to] =~ /\.old$/
super(headers, &block)
else
super({:to=>nil, :from=>nil, :boundary =>nil, :date => nil, :message =>nil, :subject =>nil, :mime_version => nil,
:content_type => nil, :charset =>nil, :content_transfer_encoding => nil}, &block)
end
end
,給了我一個失敗與undefined method 'ascii_only?' for nil:NilClass
在這條線:TestNotifier.mailer("[email protected]", "[email protected]", "test email").deliver
更新:我也試圖與重寫mail
方法這樣做:
#創建一個覆蓋傳遞方法而不做任何事情的類。 class NonSendingEmail; def交付;結束;結束
DEF郵件(頭= {},&塊) #將檢查以避免發送與結束的電子郵件 「名爲.old」 除非頭[:至] =〜/.old$/ 超級(頭,&塊) 其他 NonSendingEmail.new 結束 結束
但我仍然有同樣的結果。
好像我想要做的是什麼都沒有生成。以下是來自發貨陣列的電子郵件:deliver
方法正在生成一個空的電子郵件?
Date: Thu, 19 Jan 2012 00:00:00 +0000
Message-ID: <[email protected]>
Mime-Version: 1.0
Content-Type: text/plain
Content-Transfer-Encoding: 7bit
我認爲這個問題是軌實例化**的郵件類的事實**,而不是你的,所以你的郵件類,也許它甚至沒有使用 –
@火龍的DoL,何時/何地呢軌實例它的郵件類?哪一個郵件類是你的意思,當你說我的郵件類可能不會被使用? 'TestNotifier.mailer'?或者重寫的'mail'方法? – Ramy
不是我的意思是ActionMailer類,我不知道它在哪裏實例化,但也許軌道保持instanciating ActionMailer類,而不是YourActionMailer.new。請注意,我是**假設**它,否則我會張貼這個答案,但希望這個評論可以指出你應該搜索什麼 –