所以問題是郵件沒有被添加到ActionMailer :: Base.deliveries。與工廠女孩建設的麻煩
FactoryGirl.create返回零。我究竟做錯了什麼?
FactoryGirl.define do
factory :provisional_user do
sequence(:email) { |n| "bangbang_#{n}@example.com" }
first_name "Provisional"
last_name "User"
partner "source2"
unsubscribed false
end
factory(:unsubscribed_user, :parent => :provisional_user, :class => ProvisionalUser) do
sequence(:email) { |n| "[email protected]" }
first_name "Unsubscribed"
last_name "User"
partner "source2"
unsubscribed true
end
factory(:subscribed_user, :class => ProvisionalUser) do
sequence(:email) { |n| "[email protected]" }
first_name "Subscribed"
last_name "User"
partner "source2"
unsubscribed false
end
...
end
然後在我的測試(我也嘗試FactoryGirl.create沒有節省以下行!):
require "rspec"
require "spec_helper"
require "action_mailer"
describe "unsubscribe functionality" do
before(:each) do
ActionMailer::Base.deliveries = []
end
it "should send emails to subscribed users only" do
unsubscribed_user = FactoryGirl.build(:unsubscribed_user)
unsubscribed_user.save!
subscribed_user = FactoryGirl.create(:subscribed_user)
puts "the user is" + subscribed_user.to_s
CoRegEmailWorker.perform
#sent.length.should == 1
sent.first.email.should =~ subscribed_user.email
sent.first.email.should_not =~ unsubscribed_user.email
end
def sent
ActionMailer::Base.deliveries
end
end
,但它的失敗是這樣的:
Failure/Error: sent.first.email.should =~ subscribed_user.email
NoMethodError:
undefined method `email' for nil:NilClass
# ./spec/mailers/provisional_users_notifier_spec.rb:21
對不起,我更新我的職務。我有subscribed_user。 – Ramy 2012-01-13 17:54:49
@Ramy,對不起,我沒有那麼清楚......我的意思是在測試中,你做unsubscribed_user = factory_girl.build(...),但是沒有定義一個訂閱用戶 – mornaner 2012-01-13 18:15:08
對不起,它是在上面的部分該函數在「before_each」調用之前。我更新了我的帖子。 – Ramy 2012-01-13 18:26:03