Подтвердить что ты не робот

Как проверить маршруты с помощью Rspec 2 в Rails 3?

Я не могу найти ничего объясняющего, как тестировать маршруты в Rails 3. Даже в книге Rspec это не объясняет хорошо.

Спасибо

4b9b3361

Ответ 1

Ниже представлен краткий пример на rspec-rails сайте Github. Вы также можете использовать генератор эшафотов для производства некоторых консервов. Например,

rails g scaffold Article

должно вызывать нечто вроде этого:

require "spec_helper"

describe ArticlesController do
  describe "routing" do

    it "routes to #index" do
      get("/articles").should route_to("articles#index")
    end

    it "routes to #new" do
      get("/articles/new").should route_to("articles#new")
    end

    it "routes to #show" do
      get("/articles/1").should route_to("articles#show", :id => "1")
    end

    it "routes to #edit" do
      get("/articles/1/edit").should route_to("articles#edit", :id => "1")
    end

    it "routes to #create" do
      post("/articles").should route_to("articles#create")
    end

    it "routes to #update" do
      put("/articles/1").should route_to("articles#update", :id => "1")
    end

    it "routes to #destroy" do
      delete("/articles/1").should route_to("articles#destroy", :id => "1")
    end

  end
end

Ответ 2

Zetetic answer объясняет, как тестировать маршруты. Этот ответ объясняет, почему вы не должны этого делать.

В целом, ваши тесты должны проверять поведение, проявляемое пользователем (или объектом клиента), а не реализацию, посредством которой это поведение предоставляется. Маршруты ориентированы на пользователя: когда пользователь вводит http://www.mysite.com/profile, ему все равно, что он идет в ProfilesController; скорее, он заботится о том, чтобы он видел свой профиль.

Поэтому не проверяйте, что вы собираетесь в ProfilesController. Скорее, настройте сценарий Cucumber, чтобы проверить, что, когда пользователь переходит к /profile, он видит свое имя и информацию о профиле. Это все, что вам нужно.

Опять же: не проверяйте свои маршруты. Проверьте свое поведение.