ruby - 尽管未定义操作和路由,但 RSpec 成功

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

我已经定义了:

  • views/pages/about.html.rb 的 View ,
  • spec/controllers/pages_controller_spec.rb 中的测试:

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

没有定义:

  • 相应的 Action :

    class PagesController < ApplicationController
    
      # def about
      # end
    
    end
    
  • routes.rb 中的一条路线:

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

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


我正在使用 rspec-rails 2.0.1webrat 0.7.1rails 3.2.1
斯科特找到了一个similar issuerspec-rails 维护者关闭。

最佳答案

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

如果您牢记 Rails 如何分离关注点,就会明白这一点。
Controller 不进行路由——这发生在调度程序中。

尝试在你的测试中添加这个:

提高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 就不需要定义 Action ;它只会呈现 about.html.erb

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

关于ruby - 尽管未定义操作和路由,但 RSpec 成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9428974/

相关文章:

ruby - RSpec Controller 测试在每个请求中返回 301

ruby-on-rails - 带参数的 before_filter

ruby-on-rails - 需要手动更新Friendly_id

ruby-on-rails - RSpec:如何测试一个方法是否被调用?

ruby-on-rails - 如何使用 RSpec 和 Capybara 测试 JQuery 文件上传

ruby-on-rails - 带有 Rspec 的 Nokogiri

ruby - 在 macOS 上升级全局 Ruby 版本

ruby - 如何递归复制目录内容并排除源目录本身?

ruby-on-rails - Ruby 哈希通过比较值合并

Ruby - Watir webdriver 在 browser.goto(url) 后超时,即使 URL 已成功加载