У меня проблема с rspec-request-test в моем приложении rails. Тесты, требующие входа пользователя, терпят неудачу. Я реализовал разработку тестов в соответствии с this tutorial.. Также я нашел много ссылок, которые используют подобный подход. например hereRuby on Rails - тест Rspec с Devise не работает
Вот отрывок из моей Gemfile:
gem 'devise', '~> 3.5'
gem 'devise-i18n'
gem 'devise-i18n-views'
gem 'cancancan', '~> 1.10'
gem 'rolify'
gem 'alchemy_cms', '~> 3.2.0'
gem 'rspec-core'
gem 'rspec-rails'
gem 'i18n-tasks', '~> 0.8.7'
gem 'factory_girl_rails'
Вот RSpec-тест, то есть недостаток: (SPEC/запросы/campaigns_spec.rb)
require 'rails_helper'
RSpec.describe "Campaigns", type: :request do
describe "GET /campaigns" do
it "responds with 200" do
sign_in_as_a_valid_user_request
get campaigns_path
expect(response).to have_http_status(200)
end
end
end
Вы должны видеть эту страницу только при входе в систему. Поэтому в тесте я хочу войти в систему как пользователь (созданный с помощью FactoryGirl), чем перейти на сайт и получить 200-ответ. В самом приложении это работает хорошо.
спецификации/rails_helper.rb (экстракт)
...
require 'spec_helper'
require 'rspec/rails'
require 'devise'
require 'support/devise_support'
ActiveRecord::Migration.maintain_test_schema!
RSpec.configure do |config|
config.include FactoryGirl::Syntax::Methods
config.include Devise::TestHelpers, type: :controller
config.include Devise::TestHelpers, type: :view
config.include ValidUserRequestHelper
...
end
спецификации/поддержка/devise_support.rb
module ValidUserRequestHelper
def sign_in_as_a_valid_user_request
@user ||= FactoryGirl.create :user
post_via_redirect user_session_path, 'user[email]' => @user.email, 'user[password]' => @user.password
end
end
здесь ошибка, что тест бросает:
1) Campaigns GET /campaigns responds with 200
Failure/Error: sign_in_as_a_valid_user_request
ActionController::RoutingError:
Alchemy::Page not found "/"
# ./spec/support/devise_support.rb:13:in `sign_in_as_a_valid_user_request'
# ./spec/requests/campaigns_spec.rb:6:in `block (3 levels) in <top (required)>'
Accor ding к ссылкам, которые я нашел, это должно сработать! но это не ... Может ли кто-нибудь сказать мне, почему? Почему существует ошибка маршрутизации? Само приложение работает нормально.
Вы установили 'root_path' в своих маршрутах? Кроме того, я бы лучше заглушил ваш sign_in, как описано [здесь] (https://github.com/plataformatec/devise/wiki/How-To:-Stub-authentication-in-controller-specs), чем отправить sign_in запрос для каждого теста – AbM
Мои маршруты.rb выглядит следующим образом: «mount Alchemy :: Engine => '/' root to: redirect ('/')' –