更新:以下似乎是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
来阻止异常,但这非常麻烦。
答案 0 :(得分:0)
你可以rake environment test
。但我猜想用task test: :environment do