Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 当运行RSpec时,我得到未初始化的常量Name::Name::Engine_Ruby On Rails_Ruby_Rspec - Fatal编程技术网

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之后,我们对您的所有规范进行了重构!:我会试试你的答案!谢谢