我正在尝试为 Rails 中的自定义重定向页面编写 rspec 测试。基本上,我在 routes.rb 中有一个通配符匹配,它获取一个页面名称,以及一个“页面”控制器中的一个 show 方法,用于检查该名称的部分是否存在。如果它没有找到匹配的部分,它会呈现一个 404 页面并将状态设置为 404。所有这些都在浏览器中工作,但是 rspec 将其视为 200“OK”响应,而不是 404。
代码:页面控制器显示方法(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
路线.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。
有任何想法吗?