尽管行动和路线未定义,但RSpec仍然成功

时间:2012-02-24 10:16:22

标签: ruby ruby-on-rails-3 rspec rspec-rails

我定义了:

  • 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"
    

我在网络浏览器中收到错误,但只要定义了视图,RSpec测试就会成功通过 这是预期的行为吗?


我正在使用rspec-rails 2.0.1webrat 0.7.1rails 3.2.1 斯科特发现similar issuerspec-rails维护人员关闭。

1 个答案:

答案 0 :(得分: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

所以这个测试应该成功。当你实时调用它时,它会失败,因为没有路由。如果您编写了请求规范,路由规范或黄瓜测试,它也会失败。