为什么byebug / pry在Rspec ActionMailer的断点处停止?

时间:2015-03-18 16:45:32

标签: ruby-on-rails rspec actionmailer pry byebug

我尝试在我的测试环境中调试我的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

问题是,为什么当我运行测试user_mail.rb时,byebug / pry不会停留在rspec spec/mailer/user_mailer_spec.rb

为什么?

如何让它在那个断点停下来?

调试器中是否有错误?

3 个答案:

答案 0 :(得分: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

中详细了解该主题

答案 1 :(得分:1)

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

修改您的config/thin.yml

daemonize: false

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

答案 2 :(得分:0)

我遇到了同样的问题,只是重新启动服务器。

就我的美洲豹而言,没有春天。