【问题标题】:Help tracing why controller spec is failing帮助追踪控制器规范失败的原因
【发布时间】:2011-05-18 19:54:24
【问题描述】:

我有一个失败的 user_controller_spec.rb,我不知道为什么。

require 'spec_helper'

describe UsersController do

  describe "GET 'index'" do
    it "should be successful" do
      get 'index'
      response.should be_success
    end
  end


end

当我运行 rspec 时,它会说:

Failures:

  1) UsersController GET 'index' should be successful
     Failure/Error: response.should be_success
       expected success? to return true, got false
     # ./spec/controllers/users_controller_spec.rb:8

Finished in 0.17047 seconds
1 example, 1 failure

在浏览器中转到 /home/ 页面可以正常工作。

有没有办法获得更详细的失败原因?

注意:

这是 rails3,我正在使用 rspec。

我也有 capybara gem,搜索我的解决方案显示唯一对 capybara 的引用在我的 gem 和 gem.lock 文件中。

【问题讨论】:

    标签: ruby-on-rails controller rspec


    【解决方案1】:

    您可以尝试输出响应正文以查看消息内容。可能是您因没有正确权限而登录的用户(或匿名访问您必须登录才能查看的页面)到测试环境中的奇怪视图错误。

    get 'index'
    puts response.body.inspect
    puts response.status.inspect
    ...
    response.should be_success
    

    response.body 将包含响应的 HTML 输出,因此您应该能够说出它为什么不成功(希望它会有堆栈跟踪或重定向或其他东西)。还要记住重定向不是“成功”。如果我没记错 be_success 确保 HTTP 状态代码是 200 之一,重定向通常是 302 或 304,所以不要计算在内。如果打算进行重定向,请尝试response.should be_redirect

    【讨论】:

    • 很好的提示,谢谢!顺便说一句,可以访问请求对象以查看请求的原始 url 等吗?
    【解决方案2】:

    您可能不只是呈现页面,而是重定向。要检查可能有什么问题,我会在我的规范中做类似的事情:

    response.should == 1
    

    为了查看实际响应是什么。这会给你一个很好的线索来了解正在发生的事情。

    【讨论】:

    • 好的它现在可以工作了,谢谢(修复了一些东西,它正在重定向),但如果我做 response.should == 1 它会做什么?
    • 是的,这个是故意失败的 :) 你只是用它来检查你得到的实际值是什么(它会说像预期的:成功,得到:重定向。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-29
    • 2011-12-25
    相关资源
    最近更新 更多