2013-02-21 56 views
0

我正尝试在Rails中为自定义重定向页面编写rspec测试。基本上,我在routes.rb中获得了一个通配符匹配,它获取一个页面名称,并在“Pages”控制器中显示一个show方法,用于检查该名称是否存在部分内容。如果找不到匹配的部分,则会呈现404页面并将状态设置为404。所有这些在浏览器中都可以使用,但是rspec将其视为200“OK”响应,而不是404.Rspec显示与浏览器不同的状态代码

代码: 页控制器显示方法(?partial_exists是,我已经彻底测试一个私有方法,我可以验证使用按预期_missing.html.erb所呈现RSpec的运行时的测试日志)

def show 
    @page_name = params[:page_name].to_s.gsub(/\W/,'') 
    unless partial_exists?(@page_name) 
    render :partial => 'missing', :status => :not_found 
    end 
end 

routes.rb:

match '/' => 'pages#show', :page_name => 'index' 
match '*page_name' => 'pages#show' 

规格:

require 'spec_helper' 

describe PagesController do 

render_views 

    describe "get page name of request" do 
    it "should generate http success for a defined partial" do 
     visit '/' 
     response.should be_success 
    end 

    it "should give respond with the 404 missing page for an undefined partial" do 
     visit '/blahblahblah' 
     response.status.should be(404) 
    end 
    end 

end 

第一次测试运行正常,并呈现_index.html.erb部分为200的状态代码的第二测试渲染_missing.html.erb(我通过观察测试日志验证了这一点),但报告的状态代码为200,而不是预期的404。当我在浏览器中运行它时,它会呈现状态码为404的_missing.html.erb。

任何想法?

+0

这是控制器规格还是要求/功能规格? – zetetic 2013-02-22 03:48:11

+0

现在它是一个控制器规格。这可能会导致问题吗? – bencpeters 2013-02-22 17:05:42

回答

2

看起来你很困惑请求(功能)规格与控制器规格。 visit用于请求规格。对于控制器的规格,你想是这样的:

describe "get page name of request" do 
    it "should generate http success for a defined partial" do 
     get :index 
     response.should be_success 
    end 
end 

使用getpost的相应操作名称以测试控制器相应采取的措施。

相关问题