2012-04-26 107 views
0

我使用ActsAsTenant将多租户应用于我的应用程序。我在每次请求之前检查子域是否通过检查当前租户是否为nil。如果目前的租户是nil,我将用户重定向到404页:RSpec:验证当前子域

class ApplicationController < ActionController::Base 
    protect_from_forgery 

    set_current_tenant_by_subdomain(:client, :account_name) 

    before_filter :check_subdomain 

    private 

    def check_subdomain 
    redirect_to("/404.html") if ActsAsTenant.current_tenant.nil? 
    end 
end 

我有以下规范来测试此行为:

require 'spec_helper' 

describe SessionsController do 

    let(:client) { create(:client) } 

    before(:each) do 
    @request.host = "#{client.account_name}.lvh.me" 
    end 

    describe "GET 'new'" do 
    context "for invalid subdomains" do 
     it "should redirect the user to the 404 page" do 
     @request.host = "foo.lvh.me" 
     response.should redirect_to "/404.html" 
     end 
    end 
    end 
end 

该规范失败,出现以下错误信息:

F 

Failures: 

    1) SessionsController GET 'new' for invalid subdomains should redirect the user to the 404 page 
    Failure/Error: response.should redirect_to "/404.html" 
     Expected response to be a <:redirect>, but was <200> 
    # ./spec/controllers/sessions_controller_spec.rb:15:in `block (4 levels) in <top (required)>' 

Finished in 0.2098 seconds 
1 example, 1 failure 

Failed examples: 

rspec ./spec/controllers/sessions_controller_spec.rb:13 # SessionsController GET 'new' for invalid subdomains should redirect the user to the 404 page 

我的问题是:为什么?为什么此规范失败?我试图从浏览器手动测试它,它工作正常。

+1

顺便说一句,绝对真棒问题格式!我希望更多的人提出这样的问题。它的SICCO!具体的,内容丰富的,简洁的和话题性的!对你好! – ddd 2012-06-15 16:59:28

回答

0

对于那些可能有同样问题的人,不要忘记在测试响应之前做出请求!!!!!即:添加get :new