Я пытаюсь написать Rspec-тесты в Rails, используя вспомогательные методы Devise для входа и выхода. Метод sign_in не работает. Тем не менее, он работал раньше, до появления изменений в приложении.
Вещи, которые я пробовал:
- Я включаю тестовые помощники в Rspec.configure.
- Использование Warden login_as
- Очистка кеша Rails.
- Как избавиться от Capybara, чтобы узнать, вызвали ли это проблему.
- Я не устанавливаю сеанс явно в своих спецификациях контроллера (например, no valid_session)
Пока нет кубиков. Что мне нужно сделать по-другому, чтобы протестировать мои контроллеры с помощью зарегистрированного пользователя?
Сообщение об ошибке:
OrderItemsController GET #index renders the :index view
Failure/Error: sign_in :admin
NoMethodError:
undefined method `sign_in' for # <RSpec::ExampleGroups::OrderItemsController_2::GETIndex:0x00000102c002d0>
# ./spec/controllers/order_items_controller_spec.rb:6:in `block (2 levels) in <top (required)>'
Спецификация контроллера
require 'spec_helper'
describe OrderItemsController do
before (:each) do
admin = create(:admin)
sign_in :admin
end
describe "GET #index" do
it "renders the :index view" do
get :index
expect( response ).to render_template :index
end
end
end
spec_helper.rb
require 'rspec/rails'
require 'capybara/rspec'
RSpec.configure do |config|
config.include ApplicationHelper
config.include ControllersHelper
config.include UsersHelper
config.include Devise::TestHelpers, type: :controller
config.include FactoryGirl::Syntax::Methods
end
Gemfile
group :development, :test do
gem 'rspec-rails', '~> 3.0.0.beta'
gem 'capybara'
gem 'factory_girl_rails'
gem 'faker'
gem 'dotenv-rails'
gem 'guard'
gem 'guard-annotate'
gem 'guard-rspec', require: false
gem 'guard-livereload', require: false
gem 'foreman'
end
заводы/user.rb
FactoryGirl.define do
factory :user do
first { Faker::Name.first_name }
last { Faker::Name.last_name }
email { Faker::Internet.email }
admin false
password "secrets1"
password_confirmation "secrets1"
confirmed_at Date.today
factory :admin do
admin true
end
end
end
Спасибо заранее.