Created
February 14, 2013 23:52
-
-
Save annacruz/4957484 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
it "instantiates record with params" do | |
# require 'pry'; binding.pry | |
url = mock_model(Url) | |
post :create, :original_url => "http://example.org" | |
Url.should_receive(:new).with({"original_url" => "http://example.org"}).and_return(url) | |
end |
Author
annacruz
commented
Feb 15, 2013
Vamos lá confere ai:
spec
it "instantiates record with params" do
# require 'pry'; binding.pry
url = mock_model(Url)
post :create, :url => { :original_url => "http://example.org" }
Url.should_receive(:new).with({"original_url" => "http://example.org"}).and_return(url)
end
controller
class UrlsController < ActionController::Base
#...
def create
@url = Url.new(params[:url])
render :nothing => true
end
end
Explicando a spec:
Quando você estiver na sua spec de controller usando algum método do rspec que simula o verbo http da action, o primeiro parâmetro do método será a action e o segundo um hash que será passado para dentro da variável params, isso para o rspec se comportar como se os dados estivessem vindo de um formulário, ex:
post :create, :objeto => { :atributo_um => "valor um", :atributo_dois => "valor dois" }
put :update, :objeto => { :atributo_um => "valor um", :atributo_dois => "valor dois" }
# isso manda para o controller um params(que é um hash) com várias chaves,
# se você printar o params no controller você verá algo como
puts params[:objeto] # => { :atributo_um => "valor um", :atributo_dois => "valor dois" }
# se a chave passada fosse :url como no seu caso os atributos seriam acessados através de ```params[:url]``` como aconteceu.
Isso acontece, pois como falei o segundo parametro é um hash. O fato de se passar um :objeto
como chave do hash é para simular o comportamento do objeto no formulário.
Por exemplo no seu caso o seu campo original_url
seria montado algo como
<input type="text" name="url[original_url]" id="url_original_url" value=""/>
...que no controller seria acessado através de params[:url]
onde url é a chave do hash
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment