Gag*_*gan 17 authentication testing controller rspec
我有rspec测试控制器设计验证的问题.
我有以下设置
我已经包括在内
config.include Devise::TestHelpers, :type => :controller
Run Code Online (Sandbox Code Playgroud)
在我的spec_helper.rb中
在我的merchants_controller_spec.rb中
describe MerchantsController do
before :each do
@user = Factory(:user)
@merchant = Factory(:merchant, :user_id => @user.id,:is_approved => false, :is_blacklisted => false)
controller.stub!(:current_user).and_return(@user)
end
describe "GET index" do
it "assigns all merchants as @merchants" do
merchant = Factory(:merchant,:is_approved => true, :is_blacklisted => false)
get :index
assigns(:merchants).should eq([merchant])
end
end
end
Run Code Online (Sandbox Code Playgroud)
我的商人_controller.rb
class MerchantsController < ApplicationController
before_filter :authenticate_user!
def index
@merchants = Merchant.approved
debugger
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @merchants }
end
end
end
Run Code Online (Sandbox Code Playgroud)
我在商家模型中批准了范围
scope :approved, where(:is_approved => true, :is_blacklisted => false)
Run Code Online (Sandbox Code Playgroud)
现在我的问题是即使我存在current_user并将@user作为current_user返回,我的merchants_controller索引规范也失败了.但是,如果我评论出authenticate_user!然后规范通过,
没有authenticate_user!使用authenticate_user来捕获索引操作的调试器!调试器没有被捕获.
我认为subing current_user存在问题,我无法弄明白.
帮帮我..
zet*_*tic 23
你有没有读过github上的文档?:
Devise包括一些功能规格的测试助手.要使用它们,您只需要
Devise::TestHelpers在测试类中包含并使用sign_in和sign_out方法.这些方法与控制器具有相同的签名:
sign_in :user, @user # sign_in(scope, resource)
sign_in @user # sign_in(resource)
sign_out :user # sign_out(scope)
sign_out @user # sign_out(resource)
Run Code Online (Sandbox Code Playgroud)
另一种选择
RSpec.describe YourController, :type => :controller do
before do
user = FactoryGirl.create(:user)
allow(controller).to receive(:authenticate_user!).and_return(true)
allow(controller).to receive(:current_user).and_return(user)
end
# rest of the code
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17077 次 |
| 最近记录: |