gpt4 book ai didi

ruby-on-rails - Rspec Controller 进出同名命名空间

转载 作者:行者123 更新时间:2023-12-04 04:16:49 28 4
gpt4 key购买 nike

我有以下设置:

class UsersController < ApplicationController
...
end

class Admin::BaseController < ApplicationController
...
end

class Admin::UsersController < Admin::BaseController
...
end

同样规范:
#spec/controllers/users_controller_spec.rb:

describe UsersController do
...
end

#spec/controllers/admin/users_controller_spec.rb
describe Admin::UsersController do
...
end

独立运行时,所有规范都运行良好,但是当我一起运行时,我收到警告:
toplevel constant UsersController referenced by Admin::UsersController

并且来自管理 Controller 的规范没有通过。

路由文件:
...
resources :users
namespace "admin" do
resources :users
end

...

rails 4,Rspec 2.14

我不能对不同命名空间中的 Controller 使用相同的名称吗?

最佳答案

在使用命名空间类之前自动加载顶级类时会发生这种情况。如果您有此代码而没有预加载任何类:

UsersController
module AdminArea
UsersController
end

第一行将触发常量丢失钩子(Hook):“好的,UsersController 不存在,所以让我们尝试加载它”。

但是,到了第二行,UsersController 确实已经在顶层定义了。因此,没有触发 const_missing 钩子(Hook),应用程序将尝试使用已知常量。

为避免这种情况,请在规范文件之上明确要求适当的类:
#spec/controllers/users_controller_spec.rb:

require 'users_controller'


#spec/controllers/admin/users_controller_spec.rb

require 'admin/users_controller'

关于ruby-on-rails - Rspec Controller 进出同名命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19027199/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com