2013-09-26 15 views
7

Mam następującą konfigurację:Kontrolery rspec iz nazw z tej samej nazwie

class UsersController < ApplicationController 
... 
end 

class Admin::BaseController < ApplicationController 
... 
end 

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

podobnie Specyfikacja:

#spec/controllers/users_controller_spec.rb: 

describe UsersController do 
... 
end 

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

Wszystkie specyfikacje działają bez zarzutu, gdy uruchamiane independantly, jednak gdy uruchamiam wszyscy razem otrzymuję ostrzeżenie:

toplevel constant UsersController referenced by Admin::UsersController 

Specyfikacja administratora nie przechodzi. złożyć

Trasy:

... 
resources :users 
namespace "admin" do 
    resources :users 
end 

...

Rails 4, rspec 2,14

Nie mogę używać tej samej nazwy dla kontrolerów w różnych nazw?

Odpowiedz

23

Zdarza się to, gdy klasa najwyższego poziomu zostanie załadowana automatycznie, zanim użyta zostanie jedna z nich. Jeśli masz ten kod bez jakiejkolwiek klasy preinstalowanym:

UsersController 
module AdminArea 
    UsersController 
end 

Pierwsza linia spowoduje stałą brakujący Hak: „ok, UsersController nie istnieje, więc spróbujmy ją załadować”.

Ale potem, docierając do drugiej linii, ControllerController jest rzeczywiście już zdefiniowany na najwyższym poziomie. Tak więc nie ma włączonego haka const_missing, a aplikacja spróbuje użyć znanej stałej.

Aby tego uniknąć, wyraźnie wymaga odpowiednich klas na górze plików wyspecjalizoway:

#spec/controllers/users_controller_spec.rb: 

require 'users_controller' 

I

#spec/controllers/admin/users_controller_spec.rb 

require 'admin/users_controller' 
+0

To działa. Znakomity! +1 –

Powiązane problemy