生成rspec后:在Rails 3项目中安装任何新的脚手架都将包含一些默认规范。我对get,post,put&amp ;;感到困惑删除方法以及它们实际被调用的内容?
具体来说,在这个例子中,正在调用行delete :destroy, :id => "1"
究竟是什么?控制器?但控制器没有'删除'方法......虽然它有destroy
。但是在它上面调用'delete'不应该做任何事情,所以传递:destroy
作为参数是没有意义的......这是如何工作的?
以下是resources_controller生成的规范的一部分。我已经遗漏了,但put :update
和post :create
以及get :edit
,:show
,:new
& :index
#app/controllers/resources_controller.rb
describe ResourcesController do
def mock_resource(stubs={})
@mock_resource ||= mock_model(Resource, stubs).as_null_object
end
...
describe "DELETE destroy" do
it "destroys the requested resource" do
Resource.stub(:find).with("37") { mock_resource }
mock_resource.should_receive(:destroy)
delete :destroy, :id => "37"
end
it "redirects to the resources list" do
Resource.stub(:find) { mock_resource }
delete :destroy, :id => "1"
response.should redirect_to(resources_url)
end
end
end
答案 0 :(得分:2)
get
,post
,put
和delete
是请求中使用的HTTP谓词。请参阅:http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods
是的,以下参数是您的控制器上调用的操作,:update
,:create
等。
答案 1 :(得分:1)
编写控制器规范时,RSpec包含ControllerExampleGroup模块,"extends ActionController::TestCase::Behavior to work with RSpec."。
ActionController::TestCase::Behavior是定义这些方法的地方。