【问题标题】:rspec + rails_admin testing custom rails_admin action in /lib gives errorrspec + rails_admin 在 /lib 中测试自定义 rails_admin 操作会出错
【发布时间】:2018-09-27 14:21:47
【问题描述】:

lib 文件夹中创建自定义rails_admin 操作之前,我的rspec 测试执行良好。

用于创建仪表板的自定义操作如下所示:/lib/rails_admin.rb

module RailsAdmin
  module Config
    module Actions
      class Dashboard < RailsAdmin::Config::Actions::Base
        RailsAdmin::Config::Actions.register(self)

        register_instance_option :root? do
          true
        end
      end
    end
  end
end

它给出了预期的结果,即:新仪表板。 但是现在当我运行 rspec 测试(任何测试)时,它会给出以下错误:

Bundler::GemRequireError:

尝试加载 gem 'rails_admin' 时出错。

Gem 加载错误是:未初始化的常量 RailsAdmin::Config::Actions::Base

在运行任何测试之前,rspec 会从 lib 文件夹中加载所有文件,但由于某种原因找不到 RailsAdmin。

为了摆脱错误,我尝试手动包含 rails_admin 文件

require 'rails_admin/config/actions'
require 'rails_admin/config/actions/base'
module RailsAdmin
  module Config
    module Actions
      class Dashboard < RailsAdmin::Config::Actions::Base
        RailsAdmin::Config::Actions.register(self)

        register_instance_option :root? do
          true
        end
      end
    end
  end
end

它并不能解决问题,只是将错误移动到下一个级别并给出以下错误:

失败/错误:需要 File.expand_path('../../config/environment', 文件

NoMethodError: 未定义方法config' for RailsAdmin:Module ./config/initializers/rails_admin.rb:1:in'

rails_admin.rb 的第一行很简单:

RailsAdmin.config do |config|

为什么 rspec 无法正确加载 rails_admin gem?

【问题讨论】:

  • 你的 lib 路径添加到 rspec 加载路径了吗?如果我记得,默认情况下不会这样做。
  • @BillyKimble lib 不在 rspec 加载路径中,如果我没有错,因为 rspec 3.x lib 已自动加载(关于该问题的讨论 github.com/rspec/rspec-core/issues/1983)。我可以通过从 LOAD_PATH 中删除 lib 文件夹来运行 rspec 测试,但这只是临时解决方案。
  • @Sharj 你有没有找到任何解决方案?我也有同样的问题。
  • @JulesCorb 没有找到解决方案,而是临时修复。我从加载的路径中删除了lib/rails_admin.rb 文件,以便我可以测试其他所有内容。将$LOAD_PATH.delete_if { |p| File.expand_path(p) == File.expand_path("./lib/rails_admin.rb") } 放在rails_helper.rb 之前configure

标签: ruby-on-rails ruby rspec rails-admin


【解决方案1】:

虽然我不知道为什么会这样,但我找到了一个可行的解决方案:

我没有使用lib/rails_admin.rb,而是在其中创建了config 子文件夹和actions 子文件夹,然后将rails_admin.rb 文件放入其中。

我最终得到了以下树:lib/config/actions/rails_admin.rb。您还需要在 config/initializers/rails_admin.rb 中更改此文件的路径:

就我而言,我有 require Rails.root.join('lib', 'rails_admin.rb') 并将其更改为 require Rails.root.join('lib', 'config', 'actions', 'rails_admin.rb')

然后运行bundle exec rspec 按预期工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 2012-11-10
    • 1970-01-01
    • 2015-11-21
    相关资源
    最近更新 更多