I try to debug my user_mailer.rb within my test environment. But I dont know why the debugger doesnst stop where it suppose to.
So, the code I roughly have is:
user_mailer_spec.rb
describe UserMailer do
describe '#send_notification_letters' do
# bunch of code omitted here ...
it 'should record itself to the database'
expect { UserMailer.send_notification_letters(user) }.to change{SentMail.count}.by(1)
end
end
end
In user_mailer.rb
class UserMailer < ActionMailer::Base
def send_notification_letters(user)
byebug # should break here but doesnt,
# also tried binding.pry here, also doesnt work
# buggy code ...
# buggy code ...
# buggy code ...
SentMail.create(...) # never reached
mail(to:..., from:...)
end
end
The question is, why is byebug/pry not stopping in the user_mail.rb
when i run the test rspec spec/mailer/user_mailer_spec.rb
?
And why?
How to make it stop at that break point?
Is there a bug in the debugger?
UserMailer.send_notification_letters(user)
does not actually call the the send_notification
action, but instead it returns an ActionMailer::MessageDelivery
object. You need to invoke the delivery in order to hit the method, like this:
UserMailer.send_notification_letters(user).deliver_now
You can read more on the topic in http://api.rubyonrails.org/classes/ActionMailer/Base.html#class-ActionMailer::Base-label-Sending+mail
I've run into the same situation today. After digging around, I've found my issue is caused by the thin
server's daemonize
configuration.
Edit your config/thin.yml
:
daemonize: false
Or you can just comment out the thin
gem in your Gemfile, use the default WEBrick
instead.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With