2017-02-21 71 views
2

Я рыскал SO и никто другой результат, кажется, работает для меня:Разрабатывают Rspec не определен метод `окр» для ноля: NilClass

У меня есть ControllerHelper метод для моего Spec основан от того, что было предложено для Завещания:

def login_existing_user 
    @request.env["devise.mapping"] = Devise.mappings[:user] 
    user = FactoryGirl.create(:user) 
    company = FactoryGirl.create(:company) 
    user.company_id = company.id 
    sign_in user 
end 

Я также создание Company в этом методе, так как это шаг 2 из процесса регистрации для пользователя, чтобы иметь возможности получить аутентификацию домашнего мой.

На данный момент, я просто пытаюсь зарегистрировать пользователя с моим ScansControllerSpec:

RSpec.describe ScansController, type: :controller do 

    before(:all) do 
    login_existing_user 
    @device = build(:device) 
    end 

    describe "GET #create" do 
    it "returns http success" do 
     get :create, :device_id => @device.id 
     puts response 
     # expect(response).to have_http_status(:success) 
    end 
    end 

    .... 
end 

Но я получаю это для каждого из моих методов CRUD RSpecs:

1) ScansController GET #create returns http success 
    Failure/Error: @request.env["devise.mapping"] = Devise.mappings[:user] 

    NoMethodError: 
     undefined method `env' for nil:NilClass 
    # ./spec/support/controller_helpers.rb:15:in `login_existing_user' 
    # ./spec/controllers/scans_controller_spec.rb:6:in `block (2 levels) in <top (required)>' 

Как и другие сообщения, я включил Devise::TestHelpers в свой файл rails_helper.rb. Я также включил мой ControllerHelpers:

RSpec.configure do |config| 
    config.include Devise::TestHelpers, type: :controller 
    config.include Warden::Test::Helpers 
    Warden.test_mode! 

    config.infer_spec_type_from_file_location! 

    config.include ControllerHelpers, type: :controller 

    config.after do 
    Warden.test_reset! 
    end 
end 

В конце концов, мне нужно, чтобы иметь возможность войти пользователь, чтобы тест, который защищал методы контроллера работу. Я не уверен, что это проблема ассоциации, поэтому я добавлю, что пользователь должен иметь company, и для успешного входа в систему необходимо иметь subscription.

... но я даже не может зайти так далеко, поскольку эта ошибка удерживает меня.

+0

тестов контроллера не пробежать фактический запрос, если вы хотите получить доступ к 'объекту request' (не' @ '), то вы определены, чтобы сделать эти спецификации запроса. – Anthony

+0

@ Энтони Извините, будучи новым для тестирования, я не совсем понимаю. Итак, как мне пройти тестирование всех моих защищенных методов контроллера? У меня есть 'before_action 'от devise: authenticate_user!' В моем 'application_controller.rb', что заставило меня поверить, что мне нужно подражать зарегистрированному пользователю. – Godzilla74

+0

Кроме того, если я выберу 'login_existing_user' из своих тестов, я перенаправляюсь на свою страницу входа. – Godzilla74

ответ