Forum: Ruby on Rails Rspec post controller failure

Posted by Raul Sanchez (Guest)
on 2012-11-29 12:31
(Received via mailing list)
Hello:

I'm going crazy with a test of a controller action.

This is the test

describe "POST changetipo" do
    it "toggle tipo of tije" do
      tije = FactoryGirl.create(:tije)
      puts "--------------- #{tije.inspect}--------------"
      post :changetipo, :id => tije.id
      puts "+++++++++++++++ #{tije.inspect} +++++++++++++"
      tije.tipo.should == "2"
    end
  end


and this is the controller method


def changetipo
        @tije = Tije.find(params[:id])
        @tije.tipo == "1" ? @tije.tipo = "2" : @tije.tipo = "1"
        @tije.save!
        puts "************* #{@tije.inspect} **************"

        respond_to do |format|
          format.html { redirect_to root_path, notice: 'Tije type 
changed' }
          format.json { head :no_content }
        end

end



and this is the console output:

---------- #<Tije id: 1, tipo: "1", description: "Hoy" --------------
********** #<Tije id: 1, tipo: "2", description: "Hoy" **************
++++++++++ #<Tije id: 1, tipo: "1", description: "Hoy" +++++++++++++


so, at the beginning tipo is 1. After tije.save! is 2, but when it come
back to the test, its value is 1 again :(

All the other test are working. I only have a problem with this one.

I don't know why this test is failing. If I use web browser to test it
it's working. It changes the value in database.

I also have try to change test like this:

describe "POST changetipo" do
    it "toggle tipo of tije" do
      tije = FactoryGirl.create(:tije)
      expect {
        post :changetipo, :id => tije.to_param
      }.to change(tije.tipo)
    end
end

but I have this error

Failure/Error: tije.tipo.should == "2"
       expected: "2"
            got: "1" (using ==)

Can anyone tell me what I'm doing wrong?

Thank you very much


Raul
Posted by Colin Law (Guest)
on 2012-11-29 12:43
(Received via mailing list)
On 29 November 2012 11:30, Raul Sanchez <raulxininen@gmail.com> wrote:
>       post :changetipo, :id => tije.id
>         @tije = Tije.find(params[:id])
>
> to the test, its value is 1 again :(
In the test you are creating a variable and then posting a message
(passing the id) which changes the value in the database.  That does
not change the value of the variable in the test.  You will have to
read it back from the db again to see the changed value.

Colin
Posted by Raul Sanchez (Guest)
on 2012-11-29 13:00
(Received via mailing list)
Ahhhh :-)

Thank you.

Which will be the right way to do it?
El 29/11/2012 12:42, "Colin Law" <clanlaw@googlemail.com> escribi:
Posted by Colin Law (Guest)
on 2012-11-29 13:04
(Received via mailing list)
On 29 November 2012 11:58, Raul Sanchez <raulxininen@gmail.com> wrote:
> Ahhhh :-)
>
> Thank you.
>
> Which will be the right way to do it?

Just fetch it from the db again before tesating it

Colin
Posted by Raul Sanchez (Guest)
on 2012-11-29 13:51
(Received via mailing list)
Done and green :)

Thank you again


2012/11/29 Colin Law <clanlaw@googlemail.com>
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.