运行 RSpec 时,我得到未初始化的常量 Name::Name::Engine

Bru*_*ali 1 ruby rspec ruby-on-rails

尝试从根路径运行我的规范时,我经常收到此错误:

Failure/Error: routes { MyEngineName::Engine.routes }

NameError:
     uninitialized constant MyEngineName::MyEngineName::Engine
Run Code Online (Sandbox Code Playgroud)

或者当从 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
Run Code Online (Sandbox Code Playgroud)

我的引擎文件是:

# my_engine_name/engine.rb
module MyEngineName
  class Engine < ::Rails::Engine
    isolate_namespace MyEngineName
    engine_name 'my_engine_name'

    # ommited...
  end
end
Run Code Online (Sandbox Code Playgroud)

我能做什么?

谢谢指教!:)

max*_*max 5

在您的规范中使用完全限定的名称,而不是将您的规范放在模块中。

做:

RSpec.describe Foo::Bar::Baz do

end
Run Code Online (Sandbox Code Playgroud)

别:

module Foo
  module Bar
    RSpec.describe Baz do

    end
  end 
end
Run Code Online (Sandbox Code Playgroud)

除了在 3 个缩进级别编写规范是丑陋的事实之外,因为它会尝试解决Foo命名空间中的所有内容,因此您必须使用它::SomeOtherModule来引用其他所有内容.