Stub ENV не работает для теста Rspec cottroller - PullRequest
0 голосов
/ 14 ноября 2018

Я вхожу в задачу по реализации перенаправления https для моего приложения.После обсуждения с командой, мы должны пойти простым путем перенаправления.

И это код в контроллере:

application_controller.rb (версия 1)

class ApplicationController < ActionController::Base
  ...

    def self.force_ssl(options = {})
      return unless ENV["FORCE_SSL"].present?
      host = options.delete(:host)
      before_filter(options) do
        if !request.ssl? && params[:controller] != "health_check"
          redirect_to request.url.gsub("http://", "https://")
        end
      end
    end

    force_ssl

  ...
end

Проблема в том, что я заглушаю ENV ['FORCE_SSL'] в тесте контроллера.Это не работа.ENV корректно заглушается при запуске pry.binding в наборе тестов, но когда я запускаю pry.binding в методе force_ssl во время выполнения теста, ENV ['FORCE_SSL'] равен nil.

Код в файле спецификации:

require 'rails_helper'

RSpec.describe ApplicationController, type: :controller do

  controller do
    def index
      redirect_to root_path
    end
  end

  it "redirect to https when request in http" do
    allow(ENV).to receive(:[]).with('FORCE_SSL').and_return('true')

    get 'index', protocal: :http
    expect(response).to redirect_to %r(\Ahttps://)
  end
end

После этого, когда я изящно изменю force_ssl на метод экземпляра.

application_controller.rb (версия 2)

class ApplicationController < ActionController::Base
 ...

  before_action :force_ssl

  private

    def force_ssl
      return unless ENV["FORCE_SSL"].present?

      if !request.ssl? && params[:controller] != "health_check"
        redirect_to request.url.gsub("http://", "https://")
      end
    end
...
end

Просто хочу узнать причинупочему это происходит и есть ли способ заглушить ENV для теста с кодом контроллера версии 1?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...