【问题标题】:How can I make Rspec see my services folder?如何让 Rspec 看到我的服务文件夹?
【发布时间】:2015-02-18 19:21:08
【问题描述】:

我试图更深入地了解 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 文件以及我的服务文件夹的机制是什么。它应该考虑 MyClass、MyBase,最后是 MyDependency。

【问题讨论】:

  • 您的规格中是否需要rails_helper.rb
  • 是的,抱歉,我已经更正了规范 :)

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


【解决方案1】:

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

【讨论】:

  • 你说的完全正确,这个错误根本不相关。不了解自动加载使我认为,因此您提供的文章非常有用。非常感谢!
猜你喜欢
  • 2017-10-25
  • 2011-05-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-08
  • 2012-08-26
  • 2018-03-30
  • 1970-01-01
  • 2021-06-14
相关资源
最近更新 更多