我正尝试在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。
任何想法?
这是控制器规格还是要求/功能规格? – zetetic 2013-02-22 03:48:11
现在它是一个控制器规格。这可能会导致问题吗? – bencpeters 2013-02-22 17:05:42