我已经设置了一个我正在测试的控制器,以便在会话不存在时,大多数对其操作的请求都会重定向到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