Успех RSpec несмотря на действие и маршрут не определен - PullRequest
3 голосов
/ 24 февраля 2012

Я определил:

  • вид на 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.1, webrat 0.7.1 и rails 3.2.1.
Скотт обнаружил похожую проблему , закрытую rspec-rails сопровождающими.

1 Ответ

4 голосов
/ 25 февраля 2012

Это ожидаемое (возможно, несколько удивительное) поведение.

Если вы помните, как 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, он также не прошел бы.

...