2014-12-01 5 views
4

컨트롤러 (또는 기능) 테스트를 실행하면 Rails 4.0이 컨트롤러 인스턴스 (@controller)를 자동으로 인스턴스화하지 못합니다. 레일즈 3.2에서는 테스트가 잘 돌아갔다.
이 문제를 해결하는 방법에 대한 제안 사항이 있으십니까?Rails 4.0 RuntimeError : @controller는 nil입니다. 테스트 설정 메서드에서 설정했는지 확인하십시오.

샘플 출력 :

$ ruby -Ilib:test test/controllers/account_controller_test.rb 
[Coveralls] Set up the SimpleCov formatter. 
[Coveralls] Using SimpleCov's 'rails' settings. 
warning: parser/current is loading parser/ruby21, which recognizes 
warning: 2.1.5-compliant syntax, but you are running 2.1.3. 

... 

    1) Error: 
AccountControllerTest#test_activate_api_key: 
NoMethodError: undefined method `before_filter' for AccountController:Class 
    app/controllers/account_controller.rb:47:in `<class:AccountController>' 
    app/controllers/account_controller.rb:46:in `<top (required)>' 

    2) Error: 
AccountControllerTest#test_add_mugshot: 
RuntimeError: @controller is nil: make sure you set it in your test's setup method. 
    test/functional_test_case.rb:26:in `post' 
    test/controller_extensions.rb:533:in `assert_request' 
    test/controller_extensions.rb:202:in `either_requires_either' 
    test/controller_extensions.rb:137:in `post_requires_login' 
    test/controllers/account_controller_test.rb:418:in `test_add_mugshot' 

계정 컨트롤러 정의 :

class AccountController < ApplicationController 
    before_filter :login_required, :except => [ 

응용 프로그램 컨트롤러 :

class ApplicationController < ActionController::Base 
+0

을 정의하는 방법을? –

+0

AccountController는 https://github.com/JoeCohen/mushroom-observer/blob/ror4-joe/app/controllers/account_controller.rb – user2069311

+0

에 정의되어 있습니다. –

답변

2

이 기간 동안 사용 된 경우 ApplicationControllerActionController::Base에서 파생되지 않은 것 같다 AccountController의 정의이므로 AccountController 선언하기 전에 require을 추가`AccountController`

# file app/controllers/account_controller.rb 
require 'app/controllers/application_controller' 

class AccountController < ApplicationController 
    before_filter :login_required, :except => [ 
+1

계정 컨트롤러 및 응용 프로그램 컨트롤러 클래스 정의 라인을 추가! 추가는 문제를 해결할 필요가 있습니다. 이 문제는 Rails 4에서 다른 순서로로드되는 파일에서 발생하는 것으로 보입니다. 응용 프로그램의 test_helper 파일이 ApplicationController의 정의를 다시 열려고 시도했습니다. Rails 3에서는 정상적으로 작동합니다.하지만 Rails 4가 컨트롤러를로드하기 전에 test_helper를로드하는 것처럼 보입니다. 따라서 ApplicationController를 다시 열지 않고 test_helper 파일은 초기 정의를주었습니다. 초기 정의는 ActionController :: Base에서 파생되지 않았습니다. – user2069311