【发布时间】: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