2015-10-26 328 views
1

我的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克到我發現的鏈接,這應該工作!但它不......任何人都可以告訴我爲什麼?爲什麼會有路由錯誤?該應用程序本身工作正常。

+0

你是否在你的路由中設置了'root_path'?此外,我會更好地存檔您的sign_in描述[這裏](https://github.com/plataformatec/devise/wiki/How-To:-Stub-authentication-in-controller-specs)比提交sign_in每個測試的請求 – AbM

+0

我的routes.rb看起來像這樣(摘錄):'mount Alchemy :: Engine =>'/' root to:redirect('/')' –

回答

1

發生路由錯誤,因爲您的主機應用程序不知道引擎路由。這就是爲什麼您必須在當前控制器範圍外的視圖中使用Rail引擎的路由代理對象。請閱讀更多關於軌道引擎及其路線的特點in the official rails guides

幸運的是,鍊金與a handy test helper一起解決您的問題。只需添加到您的spec_helper

# spec/spec_helper.rb 
require 'alchemy/test_support/controller_requests' 
... 
RSpec.configure do |config| 
    config.include Alchemy::TestSupport::ControllerRequests 
    ... 
end 

知道你可以使用alchemy_get而不是get在您的要求的規格。

+0

謝謝!一些「需要」 - 我的spec_helper中缺失的地方。但添加後,你的解決方案工作! –

+0

好聽。哪些需要聲明丟失? – tvdeyen

相關問題