Rspec显示与浏览器不同的状态代码

时间:2013-02-21 06:31:37

标签: ruby-on-rails-3 rspec

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

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

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

第一个测试按预期运行,并使用状态代码200呈现_index.html.erb partial。第二个测试呈现_missing.html.erb(我通过查看测试日志验证了这一点),但报告状态代码为200,而不是预期的404。当我在浏览器中运行它时,它会使用状态代码404呈现_missing.html.erb。

有什么想法吗?

1 个答案:

答案 0 :(得分: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以及相应的操作名称来测试控制器中的相应操作。