我正在尝试为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。
有什么想法吗?
答案 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
使用get
或post
以及相应的操作名称来测试控制器中的相应操作。