Как проверить маршруты с Rspec 2 в Rails 3? - PullRequest
17 голосов
/ 20 мая 2011

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

Спасибо

Ответы [ 2 ]

32 голосов
/ 20 мая 2011

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

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
0 голосов
/ 11 ноября 2011

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

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

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

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

...