Почему Rails.logger равен нулю в тестовой среде?

ОБНОВЛЕНИЕ: следующее, по-видимому, является результатом того, что среда Rails не загружается, когда rake test запускает мои модульные тесты (в настоящее время только один модуль, который находится в /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 для предотвращения исключения, но это очень неудобно.


person pdoherty926    schedule 17.05.2016    source источник
comment
В вашем примере кода вы используете Rails.logger.log, который не будет работать   -  person fkoessler    schedule 17.05.2016
comment
Используйте Rails.logger.info или Rails.logger.debug   -  person Chakreshwar Sharma    schedule 17.05.2016
comment
Спасибо что подметил это. Мой код на самом деле использует «ошибку», но это было потеряно при переводе.   -  person pdoherty926    schedule 17.05.2016
comment
Вы действительно загружаете Rails в контексте этого теста? Поскольку этот файл хранится в папке lib, я ожидаю, что он не будет зависеть от Rails и не будет загружать Rails при тестировании...   -  person spickermann    schedule 17.05.2016
comment
Неплохо подмечено. Я предполагал, что предоставленная задача «рейк-тест» будет. Я попытаюсь найти это в исходниках Rails.   -  person pdoherty926    schedule 17.05.2016


Ответы (1)


Вы можете сделать rake environment test. Но я думаю, было бы лучше просто сделать тестовую задачу зависимой от среды с помощью task test: :environment do

person nroose    schedule 21.07.2017