10

我尝试在我的测试环境中调试我的 user_mailer.rb。但我不知道为什么调试器不会停止它应该停止的地方。

所以,我大致拥有的代码是: 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

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

问题是,为什么 byebug/pryuser_mail.rb在我运行测试时没有停止rspec spec/mailer/user_mailer_spec.rb

为什么?

如何让它停在那个断点?

调试器中是否存在错误?

4

3 回答 3

2

UserMailer.send_notification_letters(user)实际上并不调用send_notification动作,而是返回一个ActionMailer::MessageDelivery对象。您需要调用交付才能点击该方法,如下所示:

UserMailer.send_notification_letters(user).deliver_now

您可以在http://api.rubyonrails.org/classes/ActionMailer/Base.html#class-ActionMailer::Base-label-Sending+mail中阅读有关该主题的更多信息

于 2016-04-06T19:11:16.797 回答
1

我今天也遇到了同样的情况。经过挖掘,我发现我的问题是由thin服务器的daemonize配置引起的。

编辑您的config/thin.yml

daemonize: false

或者你可以thin在你的 Gemfile 中注释掉 gem,使用默认值WEBrick

于 2015-05-19T03:47:15.327 回答
0

我也遇到了同样的问题,重启服务器。

就我而言,彪马,没有春天。

于 2020-05-28T14:43:04.730 回答