2012-12-31 98 views
3

我想測試應用程序中的每一個途徑,並意識到,我應該做的,在集成測試:Where to test routes in ruby on rails導軌設計驗證在集成測試路線

不過,我發現了以下錯誤:

NoMethodError: undefined method `authenticate?' for nil:NilClass 
/usr/local/Cellar/ruby/1.9.3-p194/lib/ruby/gems/1.9.1/gems/devise-2.1.2/lib/devise/rails/routes.rb:286:in `block in authenticated' 

這是很提到網上,你不能在集成測試中使用的設計:: TestHelpers - Devise Google GroupDevise Github page


如何測試下列路線?

# config/routes.rb 

devise_for :users 

authenticated :user do 
    root to: 'static#home' 
end 

root to: 'static#landing' 

我通過把東西直接到您的會話中運行測試單元測試$ rake test:integration

回答

4

集成測試是您的應用程序的工作流程非常重要。他們可以更清楚地告訴你的URL定義

通過nicholaides檢查post,這解釋了此錯誤的原因以及Authenticated路由中的解決方案。

不過問題是:

制定有自己的方法,你不能在紅寶石使用設計:: TestHelpers。那麼你如何測試?那麼你需要包括Devise :: TestHelpers莫名其妙。

好吧,如果你正在使用RSpec的,你可以把下面的一個名爲spec/support/devise.rb文件中:

RSpec.configure do |config| 
    config.include Devise::TestHelpers, :type => :controller 
end 

這是指定here

但是等等..........再次,您可以遇到與Test::Unit同樣的問題。

然後呢?

所以,你只需要添加設計測試助手test/test_helper.rb

class ActiveSupport::TestCase 
    include Devise::TestHelpers 
end 
6

制定:: TestHelpers工作。使用Capybara運行集成測試時,您無權訪問服務器端會話。您只需訪問瀏覽器。

在我們的應用,我們的集成測試使用的輔助方法這樣,通過用戶界面與交互設計:

def authenticate(user, password = nil) 
    password ||= FactoryGirl.attributes_for(:user)[:password] 
    visit new_user_session_path 
    fill_in 'email', with: user.email 
    fill_in 'password', with: password 
    click_on 'Login' 
    expect(current_path).to eq welcome_path 
end