2012-02-24 64 views
3

我已经定义:RSpec的成功没有定义

  • views/pages/about.html.rb视图,
  • 测试中spec/controllers/pages_controller_spec.rb

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

定义:

  • 相应的动作:

    class PagesController < ApplicationController 
    
        # def about 
        # end 
    
    end 
    
  • routes.rb路线:

    Lily::Application.routes.draw do 
        # get "pages/about" 
    

我得到一个错误的Web浏览器,但RSpec的测试,只要视图定义顺利过关。
这是预期的行为?


我使用rspec-rails 2.0.1webrat 0.7.1rails 3.2.1
Scott发现一个similar issuerspec-rails关闭维护者。

+0

您能否看到浏览器中的错误页面是否进入真实的非200错误响应?您可以检查FireBug/Developer Tools或Rails日志。 – Chowlett 2012-02-24 10:22:00

+0

是的,它是'404 Not Found'。 – 2012-02-24 10:27:43

+0

@Chowlett:我也认为这个动作可能会被缓存,但如果我只是创建另一个视图/测试对,它也可以。 – 2012-02-24 10:38:19

回答

4

这是预期的(也许有些令人惊讶的)行为。

如果你记住Rails如何区分问题,那么这很有意义。
控制器不会路由 - 发生在调度程序中。

尝试在您的测试添加此:

raise controller.params.inspect

Failures: 
    1) PagesController GET pages/about 
    Failure/Error: raise controller.params.inspect 
    {"action"=>"about", "controller"=>"pages"} 

get 'about'不需要路由-Rails的测试框架需要的照顾。由于规范已经知道它应该处理什么动作,它继续前进并呼叫PagesController#about

拼图的缺失部分是只要模板存在,Rails不需要定义动作;它只会渲染about.html.erb

因此,该测试成功,因为它应该。当你实时呼叫它时,它会失败,因为没有路由。如果你写了一个请求规范,路由规范或者一个Cucumber测试,它也会失败。

+0

@zeteic谢谢。在我们交流之后,我昨天在聊天室与丹聊天。这有助于理解我们在聊天过程中看到的内容。 – ScottJShea 2012-02-25 18:03:38

+1

谢谢你的洞察力。因此,除非您测试路由本身,否则在使用RSpec进行测试时不会涉及实际路由?说得通。我不知不觉地认为RSpec运行一个微服务器,并实际发出HTTP请求,所以这让我感到意外。 – 2012-02-26 00:14:39

+0

我花了一些自由来稍微改变你的文章中的格式,先生。希望你不介意,但如果你愿意,请随时恢复。我还强调了至关重要的部分,那就是Rails并不需要定义一个行动。我只是通过其他方式进行检查 - 通过添加路线并在没有明确的动作定义的情况下查看它。 – 2012-02-26 00:23:20