【问题标题】:RSpec doesn't load my class even though it loads in the Rails consoleRSpec 不加载我的类,即使它加载到 Rails 控制台中
【发布时间】:2016-04-19 14:54:42
【问题描述】:

我在app/models/parser 中有一个名为data.rb 的类,内容如下:

class Parser::Data 
  def method1
  end
end

在这一点上没有什么特别的。我试图在实现太多之前为它编写一个测试,只是为 Rails 安装了默认的 RSpec。

我的 RSpec 文件位于 spec/models/parser/data_spec.rb 中,到目前为止非常基本:

require 'spec_helper.rb'

describe Parser::Data do
  let(:parser) { Parser::Data.new }
end

当我运行测试时,我得到了这个错误:

spec/models/parser/data_spec.rb:3:in `<top (required)>': uninitialized constant Parser (NameError)

我尝试将module Parser 放在同一目录app/models/parser 中的Data 类周围,我也尝试将其移动到lib/parser 执行相同的模块包装类,并添加lib/parser 以自动加载application.rb 但到目前为止没有任何效果。

我做错了什么?

【问题讨论】:

  • 将其放入module Parser 应该可以。除非,有一个模型Parser。在这种情况下,请将其放入class Parser

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


【解决方案1】:

require 'rails_helper' 而不是spec_helper。仅需要 spec_helper 会为我重现该问题,而需要 rails_helper 则可以修复它。更多关于 spec_helperrails_helper(包括性能影响)的信息:How is spec/rails_helper.rb different from spec/spec_helper.rb? Do I need it?

我通过使用bundle exec rspec 运行 RSpec 重现了该问题。如果我使用bin/rspec 运行 RSpec(这是 spring-commands-rspec gem 生成的 binstub),它并不关心我需要哪个帮助文件。我想弹簧负载更急切。

【讨论】:

  • 要求 rails_helper 会导致整个 rails 环境加载(这反过来又会启用 rails 持续自动加载,从而解决问题)。如果您的课程不依赖于 rails,我建议 not 要求 rails_helper - 如果您需要它,运行规范文件的启动时间会大大增加。相反,我建议您只需在规范文件顶部添加一个简单的require 即可加载parser/data.rb 文件。
  • @MyronMarston 如果您将其写为答案,我会投票赞成。不过,如果使用弹簧,这不是问题。更新中...
猜你喜欢
  • 2016-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-08
  • 1970-01-01
  • 2011-06-11
  • 2012-08-04
  • 1970-01-01
相关资源
最近更新 更多