【问题标题】:RSpec not able to find class inside modulesRSpec 无法在模块中找到类
【发布时间】:2021-01-28 17:07:35
【问题描述】:

我在 app/services/a/b/c.rb 有一堂课

Rspec 文件在 spec/services/a/b/c_spec.rb 中

我的班级是这样的:

module a
 module b
   class c
   end 
 end
end

我的 rspec 如下所示:

require 'rails_helper'

describe a::b::c do
  describe '#test' do
    it 'should test func' do
    end
  end
end

但是每次我运行测试我都会得到这个错误::

未初始化的常量 a::b::c

谁能帮我解决这个问题?

【问题讨论】:

  • 你试过重启spring了吗?我发现 app/services 目录在更改时无法正确重新加载。您必须通过 Spring.watch 手动告诉 Spring 监视该目录中的更改
  • 这似乎不是代码的问题,假设一切如你所说。我自己测试过,效果不错。
  • 根据app/services/A/B/C.rbspec/services/A/B/C_spec.rb,目录/文件名是否大写?如果它们是大写的,那么你就没有遵循约定。将所有目录/文件名改为小写字母并尝试。
  • @AmitPatel 类按照惯例使用小写字母。
  • @elliotcm 不知何故,rails 无法在测试环境中加载类。在开发中它工作正常。

标签: ruby-on-rails rspec


【解决方案1】:

我遇到了完全相同的问题,解决方法非常简单。我忘了放:

require "rails_helper"

在测试文件中。添加require 语句后,它正确加载了类。 (我知道提问者正确地添加了 require 语句)。愿这个答案对其他人有所帮助。

【讨论】:

    【解决方案2】:

    @Abhishek 我觉得问题在于 Rails 不需要/加载您的课程。 尝试在 spec_helper.rb 中要求此文件。

    或者,您可以将该文件夹添加到 eager_load_paths 并在 config/environment/test.rb 中设置 config.eager_load = true

    您可以通过在测试环境中使用 rails 控制台来确认我的预感,然后检查调用 A::B::C 是否提供了 uninitialized constant A::B::C

    现在尝试要求 app/services/A/B/C.rb 文件,这次它不会给出错误。

    【讨论】:

    • app 文件夹下的类会自动添加到 eager_load 和 autoload 路径中。类在开发环境中运行良好,但在测试环境中 rails 无法加载此类。
    猜你喜欢
    • 2016-10-17
    • 1970-01-01
    • 2013-05-19
    • 2015-02-08
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    • 2019-07-27
    • 1970-01-01
    相关资源
    最近更新 更多