我想测试应用程序中的每个路径,并了解我应该在集成测试中执行此操作: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'
网上有很多人提到你不能在集成测试中使用Devise :: TestHelpers - Devise Google Group, Devise Github page
如何测试以下路线?
# config/routes.rb
devise_for :users
authenticated :user do
root to: 'static#home'
end
root to: 'static#landing'
我正在使用$ rake test:integration
答案 0 :(得分:6)
Devise :: TestHelpers将东西直接放入你的会话中。在使用Capybara运行集成测试时,您无权访问服务器端会话。您只能访问浏览器。
在我们的应用程序中,我们的集成测试使用这样的辅助方法,通过用户界面与Devise交互:
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
答案 1 :(得分:4)
集成测试对您的应用程序工作流程非常重要。他们可以更清楚地说明您的网址定义。
通过nicholaides
检查post,它解释了此错误的原因以及经过身份验证的路由中的解决方案。
问题仍然是:
Devise有自己的方法,你不能在ruby中使用 Devise :: 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