Rspec class 的未初始化常量嵌套在模块内 - Ruby on Rails
Rspec uninitialized constant for class nested inside module - Ruby on Rails
在一个 Rails 项目中,我在 lib
目录中创建了一个新的 class,这个 class 在一个模块中命名空间。在为其创建规范文件时,我看到 NameError: uninitialized constant MyNamespace
.
这是我的文件夹结构
app/
...
lib
my_namespace
my_new_class.rb
another_namespace
another_old_class.rb
spec
lib
my_namespace
my_new_class_spec.rb
another_namespace
another_old_class_spec.rb
这里是(缩写的)内容:
lib/my_namespace/my_new_class.rb
module MyNamespace
class MyNewClass
end
end
spec/lib/my_namespace/my_new_class_spec.rb
RSpec.describe MyNamespace::MyNewClass do
it "is true"
expect(true).to eq(true) # irrelevant at this point
end
end
我包含 another_old_class_spec.rb
的原因是它的测试 运行 没有问题,而且我找不到在测试设置中明确加载或需要的任何地方(以防这可能是一个潜在的问题)。
当 运行使用 bundle exec rspec spec/lib/my_namespace/my_new_class_spec.rb
甚至 bundle exec rspec spec/lib/my_namespace/
进行测试时,我得到
An error occurred while loading ./spec/lib/my_namespace/my_new_class_spec.rb
Failure/Error:
RSpec.describe MyNamespace::MyNewClass do
NameError:
uninitialized constant MyNamespace
就像 Georgiy Melnikov 在他的评论中暗示的那样,默认情况下 /lib
目录不在 autoload paths 中,因此常量 MyNamespace
不会自动解析。
你基本上有两种选择来解决这个问题:
- 明确要求规范文件顶部带有
require lib/my_namespace/my_new_class
的文件
- 将
lib/
添加到自动加载路径(现在不鼓励这样做)
在一个 Rails 项目中,我在 lib
目录中创建了一个新的 class,这个 class 在一个模块中命名空间。在为其创建规范文件时,我看到 NameError: uninitialized constant MyNamespace
.
这是我的文件夹结构
app/
...
lib
my_namespace
my_new_class.rb
another_namespace
another_old_class.rb
spec
lib
my_namespace
my_new_class_spec.rb
another_namespace
another_old_class_spec.rb
这里是(缩写的)内容:
lib/my_namespace/my_new_class.rb
module MyNamespace
class MyNewClass
end
end
spec/lib/my_namespace/my_new_class_spec.rb
RSpec.describe MyNamespace::MyNewClass do
it "is true"
expect(true).to eq(true) # irrelevant at this point
end
end
我包含 another_old_class_spec.rb
的原因是它的测试 运行 没有问题,而且我找不到在测试设置中明确加载或需要的任何地方(以防这可能是一个潜在的问题)。
当 运行使用 bundle exec rspec spec/lib/my_namespace/my_new_class_spec.rb
甚至 bundle exec rspec spec/lib/my_namespace/
进行测试时,我得到
An error occurred while loading ./spec/lib/my_namespace/my_new_class_spec.rb
Failure/Error:
RSpec.describe MyNamespace::MyNewClass do
NameError:
uninitialized constant MyNamespace
就像 Georgiy Melnikov 在他的评论中暗示的那样,默认情况下 /lib
目录不在 autoload paths 中,因此常量 MyNamespace
不会自动解析。
你基本上有两种选择来解决这个问题:
- 明确要求规范文件顶部带有
require lib/my_namespace/my_new_class
的文件 - 将
lib/
添加到自动加载路径(现在不鼓励这样做)