在Rspec中测试控制器规范中的子域

时间:2014-04-08 06:23:34

标签: ruby-on-rails rspec

我已经成功使用控制器规范使用之前的过滤器来处理子域

before do 
    request.host = "an_account.example.com"
end

当用户试图访问他们不属于的子域时,他们会被注销并发送回设计的登录行动,即子域名下的ISNT,即

www.example.com/users/sign_in

浏览器中的一切正常,被重定向的偷偷摸摸的用户被禁止输入不相关的子域,而是重定向到登录表单。

但是我的控制器规格失败

  

“预期的重定向响应   http://example.com/users/sign_in但是是重定向的   http://an_account.example.com/users/sign_in

有人可以为此提供帮助吗?

这是授权用户的before_filter

def authorize_account_subdomain!
    if current_account.subdomain != request.subdomain
      sign_out
      flash[:warning] = t('errors.unauthorized')
      redirect_to new_user_session_url(:subdomain => false)
    end
  end

和测试

context 'when signed_in' do
    let(:user)      { create(:user_with_account) }
    let(:proposal)  { create(:proposal, :account => user.account) }
    let(:subdomain) { user.account.subdomain }

    before do
      sign_in user
    end

    context "when accessing other subdomain" do

      before do 
        other_subdomain = "other_subdomain"
        @request.host = "#{other_subdomain}.example.com"
      end

      it "can not access show action" do
        post :show, :id => 1
        access_denied!
      end
   end
end


#test helper

def access_denied!
    response.should redirect_to new_user_session_url(:subdomain => false)
    flash[:warning].should == I18n.t('errors.unauthorized')
end

1 个答案:

答案 0 :(得分:0)

当我看到这个时,我看到查询是正确的,即/ users / sign_in在两种情况下都是相同的。所以这告诉我它的:subdomain =>在您的网址助手中为false。

请参阅此答案以获得更多说明

https://stackoverflow.com/a/15624241/793330