使用CRUD方法调用的RSpec代码示例基础知识

时间:2011-02-17 03:24:31

标签: ruby-on-rails rspec crud

生成rspec后:在Rails 3项目中安装任何新的脚手架都将包含一些默认规范。我对get,post,put&amp ;;感到困惑删除方法以及它们实际被调用的内容?

具体来说,在这个例子中,正在调用行delete :destroy, :id => "1"究竟是什么?控制器?但控制器没有'删除'方法......虽然它有destroy。但是在它上面调用'delete'不应该做任何事情,所以传递:destroy作为参数是没有意义的......这是如何工作的?

以下是resources_controller生成的规范的一部分。我已经遗漏了,但put :updatepost :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

2 个答案:

答案 0 :(得分:2)

getpostputdelete是请求中使用的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是定义这些方法的地方。