如何让 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
的内容)。
我试图更深入地了解 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
的内容)。