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

时间:2015-02-18 19:21:08

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

我正在努力深入了解RSpec和Rails如何加载文件,而不仅仅是解决这一特定问题。

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

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

在spec文件夹中,我有一个测试。此时,它只测试我的类的新实例的创建

require 'rails_helper'
RSpec.describe MyClass do
    context 'something' do
        it 'does something' do
            instance = MyClass.new
        end
    end
end

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

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

为了使它更复杂,MyDependency属于一组公共类,它们继承自基类:

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文件的机制,以及我的services文件夹。它应该考虑MyClass,MyBase和MyDependency。

1 个答案:

答案 0 :(得分:2)

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