После генерации 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