2

我需要测试具有设计身份验证过滤器的视图的内容before_filter :authenticate_user!

当我运行测试时,应用程序没有登录用户并重定向到 /users/sign_in。然后测试在这个视图上搜索内容。

如何在使用 FactoryGirl 的情况下模拟用户会话或跳过此过滤器进行测试?

提前致谢

4

2 回答 2

1

尝试将此添加到您的规范中:

controller.class.skip_before_filter :authenticate_user!

另一种(可能更好)的方法是查看设计文档以查看他们推荐的测试模式。

于 2013-08-05T20:25:09.440 回答
1

看看控制器宏

module ControllerMacros
   def login_user
    before(:each) do
      user = FactoryGirl.create(:user)
      @current_user = user
      sign_in user
    end
  end
end

规范/spec_helper.rb

RSpec.configure do |config|
  ....
  config.extend ControllerMacros, :type => :controller
end

规格/控制器/some_controller_spec.rb

require File.dirname(__FILE__) + '/../spec_helper'

describe SomeController, "index" do
    context "for authenticated users" do
        login_user
        ...
    end
end

当您拥有基于不同用户角色的控制器逻辑时,它非常有用。

于 2013-08-05T22:05:15.953 回答