如何让 Rspec 看到我的服务文件夹?

How can I make Rspec see my services folder?

我试图更深入地了解 RSpec 和 Rails 如何加载文件,而不是解决这个具体问题。

我的 rails 应用程序有一个共同的结构,有一个新文件夹:

my_app/
      /assets
      /controllers
      /...
      /services (new folder)
      /spec

我在 spec 文件夹中进行了测试。目前,它只测试我的 class

的新实例的创建
require 'rails_helper'
RSpec.describe MyClass do
    context 'something' do
        it 'does something' do
            instance = MyClass.new
        end
    end
end

MyClass 有点特殊,因为在它的构造函数中注入了我的其他 classes 的依赖项:

class MyClass
     def initialize(dependency = MyDependency.new)
         @dependency = dependency
     end
end

为了让它更复杂一点,MyDependency 属于一组常见的 classes,继承自基础 class:

require 'my_base'
class MyDependency < MyBase
end

此代码失败,出现以下异常:

Failure/Error: instance = MyClass.new
 NoMethodError:
   undefined method `value' for nil:NilClass

我的测试与 spec_helper.rb 在同一个文件夹中。此助手以:

开头
ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'

我不明白允许 RSpec 访问 rails 文件以及我的服务文件夹的机制是什么。它应该考虑 MyClass、MyBase,最后是 MyDependency。

RSpec 依赖于 Rails 和 Ruby 自动加载,Rails 和 Ruby 自动加载在 http://urbanautomaton.com/blog/2013/08/27/rails-autoloading-hell/ 中进行了解释。但是,自动加载可能与您在上面显示的错误无关。要了解那里发生了什么,您应该查看并(如果您对帮助感兴趣)共享回溯和相关代码(例如调用 .value 的内容)。