Я рыскал 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
.
... но я даже не может зайти так далеко, поскольку эта ошибка удерживает меня.
тестов контроллера не пробежать фактический запрос, если вы хотите получить доступ к 'объекту request' (не' @ '), то вы определены, чтобы сделать эти спецификации запроса. – Anthony
@ Энтони Извините, будучи новым для тестирования, я не совсем понимаю. Итак, как мне пройти тестирование всех моих защищенных методов контроллера? У меня есть 'before_action 'от devise: authenticate_user!' В моем 'application_controller.rb', что заставило меня поверить, что мне нужно подражать зарегистрированному пользователю. – Godzilla74
Кроме того, если я выберу 'login_existing_user' из своих тестов, я перенаправляюсь на свою страницу входа. – Godzilla74