【问题标题】:NameError: unitialized constant ServiceName with default rspec configurationNameError:具有默认 rspec 配置的未初始化常量服务名称
【发布时间】:2019-06-08 21:06:52
【问题描述】:

我创建了rails new --api whatever

gem 'rspec-rails', '~> 3.8'

在我的Gemfile。然后,我创建了:

app/services/whatever_module/whatever_class.rb

及对应的spec文件:

spec/services/whatever_module/whatever_class_spec.rb 

现在,当我跑步时:

rspec services

我收到此错误:

NameError: 未初始化的常量 WhatModule

如何告诉 rspec 通过其规范路径识别模块?

【问题讨论】:

  • whatever_class_spec.rbcalculate.rb 是空的吗?

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


【解决方案1】:

你的规范文件应该在

spec/services/distamce/whatever_class_spec.rb.

在您的情况下,rspec 尝试在您的 spec 文件路径中查找 WhatModule,因为 /whatever_module/。你可以试试这个改成spec/services/foo_bar/whatever_class_spec.rb,你会得到缺少FooBarModule的错误。

我想我知道你错过了什么。

Rspec 不会自动要求您的 app 文件夹,因此最初 app 文件夹中没有可用的模块或类。

当您检查 https://github.com/rspec/rspec-rails#installation @2 时,您可以看到您必须为 rspec 添加一些样板文件,例如 rails_helper.rbspec_helper.rbrails generate rspec:install。这些负责所有与 rspec 相关的设置和 app 文件夹的要求。

还需要在每个规范文件的顶部添加require 'rails_helper'

在您完成所有这些操作并收到错误 Unable to autoload constant WhateverModule::WhateverClass 之后,您的 whatever_class.rb 必须看起来像这样

module WhateverModule
  class WhateverClass
  end
end

或者您在whatever_module 文件夹之外的文件中定义模块。

【讨论】:

  • 您好。我在我的问题中通过了错误的路径是我的错,它是在你在这里写的时候设置的,但它仍然没有用。我现在要使用您在此处提供的路径来编辑我的问题。这是对您的支持,请尝试。我所做的(它有效,但我不喜欢它)是在whatever_class_spec.rb 文件的顶部添加include WhateverModule::WhateverClass。 Rubocop 对此发疯了,我认为这不是正确的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-13
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 2016-09-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多