如何在Rails 3中使用Rspec 2测试路由?

时间:2011-05-20 00:11:51

标签: ruby-on-rails-3 rspec2

我找不到任何解释如何在Rails 3中测试路由的内容。即使在Rspec书中,它也不能很好地解释。

由于

2 个答案:

答案 0 :(得分:32)

rspec-rails Github site有一个简短的例子。您还可以使用脚手架生成器来生成一些罐装示例。例如,

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

答案 1 :(得分:-8)

Zetetic的答案解释了如何测试路线。这个答案解释了为什么你不应该这样做。

通常,您的测试应测试公开给用户(或客户端对象)的行为,而不是测试提供该行为的实现。路由是面向用户的:当用户键入http://www.mysite.com/profile时,他并不关心它是否转到ProfilesController;相反,他关心他看到他的个人资料。

所以不要测试你要去ProfilesController。相反,设置一个Cucumber场景来测试当用户转到/profile时,他会看到他的名字和个人资料信息。这就是你所需要的一切。

再次:不要测试你的路线。测试你的行为。