运行rspec时无法修改冻结的数组错误

Dre*_*rew 6 ruby rspec ruby-on-rails rails-engines

一直在将Rails引擎升级到Rails 5.1并且现在正在使rspec测试恢复工作的过程中.

我有一个控制器,在那个控制器中我有以下内容:

module Users
  class SessionsController < Devise::SessionsController
    skip_before_action :authenticate_user!
    skip_before_action :authorize_user!

    def create
      super
      flash[:analytics] = { "data-analytics-form-completed-name" => "#{StewardshipUser.app_slug}/sign-in", "data-analytics-form-completed-type" => "login" }
    end

    def repopulate_email
      (params[:user] && params[:user][:email]) ? params[:user][:email] : ''
    end
    helper_method :repopulate_email
  end
end
Run Code Online (Sandbox Code Playgroud)

如果我删除skip_before_action :authorize_user!测试运行,但不是所有成功.

有了这条线,我收到以下错误:

An error occurred while loading ./spec/validators/rfc_compliant_validator_spec.rb.
Failure/Error: Dummy::Application.initialize!

RuntimeError:
  can't modify frozen Array
# /Users/ahcarpenter/.rvm/gems/ruby-2.2.2/gems/railties-5.1.4/lib/rails/engine.rb:579:in `unshift'
# /Users/ahcarpenter/.rvm/gems/ruby-2.2.2/gems/railties-5.1.4/lib/rails/engine.rb:579:in `block in <class:Engine>'
Run Code Online (Sandbox Code Playgroud)

有关为什么初始化程序会在那里打破那条线的任何想法?

另外,当我最初重新初始化rspec时,我不得不注释掉该方法以使初始化程序运行,因为由于某种原因它不再被发现(我似乎没有碰到任何包含该类型的宝石版本)方法,但也许如此)

den*_*ter 3

我确信您现在已经解决了这个问题,但是我遇到了这个错误,我意识到我的测试数据库没有正确初始化。我通过运行以下命令修复了该错误:

rails db:migrate RAILS_ENV=test
Run Code Online (Sandbox Code Playgroud)

我希望这对任何偶然发现这篇文章的人都有帮助。