一个非常简单的 controller, 就俩 action,如下:
class PostsController < ApplicationController
def index
@posts ||= Post.all
respond_to do |format|
format.html # index.html.haml
format.json { render json: @posts }
end
end
def show
@post ||= Post.find(params[:id])
respond_to do |format|
format.html # show.html.haml
format.json { render json: @post }
end
end
end
然后跑一个非常简单的测试,如下:
require 'spec_helper'
describe PostsController do
describe "GET index" do
it "should renders index view" do
get :index
response.should render_template "index"
end
end
describe "GET show" do
it "should renders show view" do
get :show
response.should render_template "show"
end
end
end
routes.rb
也只有一个 resource,如下:
Blog::Application.routes.draw do
resources :posts
end
结果呢,index 的测试通过,show 的测试就是不通过,显示错误是:ActionController::RoutingError: No route matches {:controller=>"posts", :action=>"show"}
想不通为什么?resources :posts
不是已经映射了标准的 http verb 了吗?为什么 show 无法通过测试呢?
我还写了对应的 views,应用本地跑起来测试一下,index 和 show 都是正常的不会报错,真是奇了怪了!