Пример кода RSpec с вызовами методов CRUD - PullRequest
2 голосов
/ 17 февраля 2011

После генерации rspec: установка в проекте Rails 3 любой новый скаффолдинг будет включать некоторые спецификации по умолчанию. Я запутался в методах get, post, put & delete и о том, что они на самом деле вызывают?

в частности, в этом примере строка delete :destroy, :id => "1" вызывается для чего именно? контроллер? но у контроллера нет метода delete ... хотя у него есть 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

Ответы [ 2 ]

2 голосов
/ 17 февраля 2011

get, post, put и delete - это HTTP-глаголы, используемые в запросе.См .: http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods

И да, следующий аргумент - это действие, вызываемое на вашем контроллере, :update, :create и т. Д.

1 голос
/ 17 февраля 2011

Когда вы пишете спецификации контроллера, RSpec включает модуль ControllerExampleGroup, который "расширяет ActionController :: TestCase :: Behavior для работы с RSpec." .

ActionController :: TestCase :: Behavior - это место, где определены эти методы.

...