【发布时间】:2017-11-03 17:21:25
【问题描述】:
一直在将 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
如果我删除 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>'
关于为什么初始化程序会因那里的那一行而崩溃的任何想法?
此外,当我最初去重新初始化 rspec 时,我不得不注释掉该方法以使初始化程序运行,因为由于某种原因它不再被发现(我似乎没有增加任何 gem 版本包含该方法,但也许是这样)
【问题讨论】:
-
你能分享你的测试代码吗?我假设的一件事是,在您的测试中,您没有登录用户,这会以某种方式导致失败。另外,
authorize_user!函数来自哪里?你在使用pundit或类似的东西吗? -
我在 5.0.1、Rails 5.1 和 master 分支中都遇到了同样的错误。这似乎与第三方引擎中路由的定义有关。提示是另一个失败的规范
Missing :action key on routes definition, please check your routes.。
标签: ruby-on-rails ruby rspec rails-engines