Ruby on rails 当运行RSpec时,我得到未初始化的常量Name::Name::Engine
当尝试从根路径运行我的规范时,我经常遇到此错误:Ruby on rails 当运行RSpec时,我得到未初始化的常量Name::Name::Engine,ruby-on-rails,ruby,rspec,Ruby On Rails,Ruby,Rspec,当尝试从根路径运行我的规范时,我经常遇到此错误: Failure/Error: routes { MyEngineName::Engine.routes } NameError: uninitialized constant MyEngineName::MyEngineName::Engine 当从spec/dummy运行服务器并转到localhost:3000时,也会发生同样的情况,但使用MyEngineName::MyEngineName::ApplicationControl
Failure/Error: routes { MyEngineName::Engine.routes }
NameError:
uninitialized constant MyEngineName::MyEngineName::Engine
当从spec/dummy运行服务器并转到localhost:3000时,也会发生同样的情况,但使用MyEngineName::MyEngineName::ApplicationController
在测试中,我需要声明路由的来源:
require 'rails_helper'
module MyEngineName
module Companies
RSpec.describe UsersController, type: :controller do
routes { MyEngineName::Engine.routes }
render_views
# ommited...
end
end
end
我的引擎文件是:
# my_engine_name/engine.rb
module MyEngineName
class Engine < ::Rails::Engine
isolate_namespace MyEngineName
engine_name 'my_engine_name'
# ommited...
end
end
#我的引擎名称/engine.rb
模块MyEngineName
类引擎<::Rails::引擎
隔离名称空间MyEngineName
引擎名称“我的引擎名称”
#推荐。。。
结束
结束
我能做什么
谢谢你的建议!:) 在等级库中使用完全限定名称,而不是将等级库放置在模块中 做: 不要:
module Foo
module Bar
RSpec.describe Baz do
end
end
end
除此之外,在3个缩进级别上编写规范是一件很难看的事情,因为更改上下文会试图解决
Foo
名称空间中的所有问题,因此您必须使用::SomeOtherModule
来引用其他所有内容。在您的文档中使用完全限定的名称等级库,而不是将等级库放置在模块中
做:
不要:
module Foo
module Bar
RSpec.describe Baz do
end
end
end
除此之外,在3个缩进级别编写规范是一件很难看的事情,因为更改上下文会试图解决
Foo
名称空间中的所有问题,因此您必须使用::SomeOtherModule
引用其他所有内容。从概念上讲,您不应该在模块(命名空间),因为测试在应用程序外部进行,并从外部测试其行为。您也不必担心与RSpec的冲突,因为它使用功能性DSL而不是创建测试类。在开始使用rubocop之后,我们对您的所有规范进行了重构!:我会试试你的答案!谢谢从概念上讲,您不应该将测试放在模块(命名空间)中,因为测试位于应用程序外部,并从外部测试其行为。您也不必担心与RSpec的冲突,因为它使用功能性DSL而不是创建测试类。在开始使用rubocop之后,我们对您的所有规范进行了重构!:我会试试你的答案!谢谢