为什么Rails.logger在测试环境中为零?

时间:2016-05-17 13:02:01

标签: ruby-on-rails ruby ruby-on-rails-5

更新:以下似乎是rake test运行我的单元测试时没有加载Rails环境的结果(目前只有一个模块位于/ lib中)。是否可以从命令行包含环境,而不是更改rake任务本身?有没有更好的方法来解决这个问题(没有使用依赖注入来引入Rails.logger,这是我可能最终会做的事情)?

由于以下对NoMethodError的调用,我在测试环境中看到了Rails.logger.error

# /lib/square.rb

module Square

  def self.get_total_sales_for_location(location_id, timeout: 5)
    begin
      url = "https://connect.squareup.com/v2/locations/#{location_id}/transactions"
      headers = {Authorization: "Bearer #{ENV['SQUARE_PERSONAL_ACCESS_TOKEN']}"}
      response = RestClient::Request.execute  headers: headers,
                                              method: :get,
                                              timeout: timeout,
                                              url: url

      if response.code == 200
        JSON.parse response.body
      else
        fail
      end
    rescue => error
      Rails.logger.error "Square::get_total_sales_for_location - #{error.message}"
      raise
    end
  end
end

这一切都可以在控制台上正常运行,但运行我的测试会产生:NoMethodError: undefined method 'error' for nil:NilClass

我的临时解决方法是使用:try来阻止异常,但这非常麻烦。

1 个答案:

答案 0 :(得分:0)

你可以rake environment test。但我猜想用task test: :environment do

让测试任务依赖于环境会更好