您无法在我的Rails应用程序中执行任何操作(除了登录登录页面)而无需登录。我已花费大量时间对work进行身份验证(在我的设计中)控制器规格和Warden在我的功能规格中。)
我走的是正确的道路吗?这种感觉有点错,因为我想自己测试我的控制器......不一定要反复重复验证测试(除了在用户控制器中明确测试验证)。
最佳做法是什么?您是否明确地在任何地方进行身份验证,或者您是否以某种方式伪造身份验证并专注于您的个人控制器/功能规范而无需身份验证?
答案 0 :(得分:1)
因为我想测试我的控制器,所以感觉不对 他们自己......不一定要重复认证测试 (除了在我的用户中明确测试身份验证之外) 控制器)。
这就是Devise
为测试控制器提供自己的test helpers的原因。您不需要每次都测试授权代码,只需要一个帮助您在测试中授权用户的帮助。
最小化设置:
rails_helper.rb
require 'spec_helper'
require 'rspec/rails'
# note: require 'devise' after require 'rspec/rails'
require 'devise'
RSpec.configure do |config|
config.include Devise::TestHelpers, :type => :controller
end
然后,在您的控制器规格中:
# in case you use FactoryGirl, if you don't, just create your models as you like
let(:current_user) { FactoryGirl.create(:user) }
before do
# this line is needed for testing Devise controllers
@request.env["devise.mapping"] = Devise.mappings[:user]
sign_in current_user
end