我的Rails應用程序中的rspec-request-test存在問題。需要用戶登錄的測試失敗。我已根據this tutorial.實施了設計測試。我還發現了許多鏈接,這些鏈接都使用了類似的方法。例如hereRuby on Rails - Devs的Rspec測試失敗
這裏是我的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的測試,這是失敗的:(規格/請求/ 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)>'
Accordin克到我發現的鏈接,這應該工作!但它不......任何人都可以告訴我爲什麼?爲什麼會有路由錯誤?該應用程序本身工作正常。
你是否在你的路由中設置了'root_path'?此外,我會更好地存檔您的sign_in描述[這裏](https://github.com/plataformatec/devise/wiki/How-To:-Stub-authentication-in-controller-specs)比提交sign_in每個測試的請求 – AbM
我的routes.rb看起來像這樣(摘錄):'mount Alchemy :: Engine =>'/' root to:redirect('/')' –