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

时间:2016-03-09 18:45:31

标签: ruby-on-rails ruby rspec

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

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

我该怎么办?

谢谢你的建议! :)

1 个答案:

答案 0 :(得分:4)

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

执行:

RSpec.describe Foo::Bar::Baz do

end

不要:

module Foo
  module Bar
    RSpec.describe Baz do

    end
  end 
end

除了在三个缩进级别编写规范是丑陋的事实,因为你要求通过更改上下文来启动私有,因为它将尝试解析Foo命名空间中的所有内容,以便您必须使用::SomeOtherModule来引用其他所有内容。