2014-06-18 14 views
8

W moim pliku spec_helper, mam ten wiersz:rspec nie ładuje pliki pomocnicze

Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f } 

Jednak gdy uruchamiam rspec, otrzymuję błędy jak:

undefined local variable or method `login_user' for RSpec::ExampleGroups::PostsController::POSTCreate::WhenSignedIn:Class 

odpowiednia funkcja znajduje się w support/auth_macros , gdzie przypuszczam, że zostanie on odebrany przez instrukcję require w moim spec_helper. Masz pojęcie, co się dzieje?

Plik w pytaniu:

# support/auth_macros.rb 
module AuthMacros 
    def login_user 
    before(:each) do 
     @request.env["devise.mapping"] = Devise.mappings[:user] 
     @logged_in_user = FactoryGirl.create(:user, username: "logged_in") 
     sign_in @logged_in_user 
    end 
    end 

    def logout_user 
    before(:each) do 
     sign_out @logged_in_user 
    end 
    end 
end 
+0

jest to 'support/auth_macros.rb' - rozszerzenie jest ważne – BroiSatse

+0

Tak, to plik' rb'. – nullnullnull

+0

Czy możesz pokazać nam również ten plik? – BroiSatse

Odpowiedz

7

Masz wymagany plik, ale metoda jest owinięty wewnątrz modułu. Musisz usunąć moduł owijający lub dołączyć go do testu grupy.

Aktualizacja:

Aby mieć 100% specyficzny: require ładuje plik i nie robić nic innego. Po utworzeniu pliku moduł został utworzony, ale nie został uwzględniony. Musisz dołączyć to do: include AuthMacros

+0

W moim teście grupowym potrzebuję 'spec_helper'', co z kolei wymaga modułu. Niestety, nawet jeśli bezpośrednio wymagam "support/auth_macros'', ten błąd nadal występuje. – nullnullnull

+0

@timothycommoner - Zaktualizowano pytanie, aby było bardziej zrozumiałe. – BroiSatse

+0

Ah, teraz widzę. Wygląda na to, że został rozszerzony poprzez config: 'config.extend ControllerMacros,: type =>: controller'. Poszedłem dalej i usunąłem tę linię, a następnie zabrałem funkcje z ich modułu. Wystąpił błąd, ale pojawiły się nowe błędy w mojej specyfikacji kontrolera, takie jak 'niezdefiniowana metoda 'get'' i' niezdefiniowana metoda' post''. Domyślnie specyfikacja kontrolera ma dostęp do tych metod, prawda? Być może jest tu głębszy problem. Jakieś pomysły, czy powinienem otworzyć nowe pytanie? – nullnullnull