0

我正在尝试为 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。

有任何想法吗?

4

1 回答 1

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与适当的动作名称一起测试控制器中的相应动作。

于 2013-02-22T23:18:26.283 回答