我应该如何模拟我的会话?

时间:2014-01-08 00:18:38

标签: ruby-on-rails rspec

我已经设置了一个我正在测试的控制器,以便在会话不存在时,大多数对其操作的请求都会重定向到sign_in页面。

因此,我需要在单元测试中测试控制器时使用sign_in方法。我还需要在数据库中创建用户,以便他们可以登录。

这很容易实现:

describe MyController, do
    let(:user) { FactoryGirl.create(:user)} # The 'create' creates in the database as well as in memory
    context "with session" do
        before {
            sign_in user
        }    

        context ".index" do
            assigns(:example).should == "Just an example"
        end
    end
end

然而,这不是一个好的单元测试,因为它取决于活动记录和数据库,以及Devise的测试助手方法。

那么当我试图测试它时,如何使用模拟(或其他东西)来阻止我的控制器重定向?

我的控制器:

class MyController < ApplicationController
    before_filter :authenticate_user!, only: [:index]

    def index
        @example = "Just an example"
    end
end

1 个答案:

答案 0 :(得分:0)

根据Devise Wiki

中的建议存根用户身份验证