Forum: RSpec Testing Controllers in Rspec

Ecec81af7caddc8730eee285475df4da?d=identicon&s=25 ruby rails (rubyonrails)
on 2013-02-27 14:18
I am building an Rails application where the forgot password feature is
implemented. I need to write the test cases for it using RSpec. I am
very new to RSPEC and got the basic idea of how rspec works from the
tutorial and screencasts. But I am not sure how it can be tested for
controllers. In my controller method if i am retrieving a user from
database, then how would I test it using rspec. Do I give dummy data for
testing rspec.?? Please find the example below.

In Usercontroller.rb

def forgot_pass

    user = User.find_by_email(params[:email])
    forget_pass = ForgetPassword.new
    forgetpass.userid = user.email
    forgetpass.status = true
    forgetpass.save!
    redirect_to login_url

end

In my password_reset_spec

    require 'spec_helper'
    describe "PasswordResets" do
    it "emails when user requesting password reset" do
        user=User.new
        forget_pwd = ForgetPassword.new
        #forget_pwd.userid.should == "prasad"
        #forget_pwd.token.should == "123456"
        forget_pwd.userkey = "14dd"
          visit auth_index_path
          click_link "Forgot Password"
          fill_in "Email", :with=> 'pp@gmail.com'
          click_button "Submit"
          current_path.should eq(login_path)
          page.should have_content("A verification mail has been sent to
your email id. Click on the confirmation link to change the password")
          last_email.to.should include('pp@gmail.com')
       end
    end

In the test how do I test whether the user exists and assign the
attributes. In my case,
**user = User.find_by_email(params[:email])
forgetpass.userid = user.email**

Please help as I am newbie in Rspec
F8069adedbe2d37460c54eac8102351b?d=identicon&s=25 guirec c. (guirec_c)
on 2013-02-27 15:24
I think your are confused with acceptance specs and controllers spec. In
a controller spec you must to test only your controller in total
isolation. You can use stubs and mocks to do it. In the acceptance spec
you must to test all the behaviour at a very high level.

I think to create a record in the database for a feature spec is
correct. You can see an example of my specs here :
https://github.com/GCorbel/comment-my-projects/blo...
and here :
https://github.com/GCorbel/comment-my-projects/blo....

As you can see, I use acceptance DSL
(http://jeffkreeftmeijer.com/2011/acceptance-testin...)
and factory girl (https://github.com/thoughtbot/factory_girl_rails).

I hope to help you. It's very hard to begin.
Ecec81af7caddc8730eee285475df4da?d=identicon&s=25 ruby rails (rubyonrails)
on 2013-02-27 19:53
guirec c. wrote in post #1099350:
> I think your are confused with acceptance specs and controllers spec. In
> a controller spec you must to test only your controller in total
> isolation. You can use stubs and mocks to do it. In the acceptance spec
> you must to test all the behaviour at a very high level.
>
> I think to create a record in the database for a feature spec is
> correct. You can see an example of my specs here :
>
https://github.com/GCorbel/comment-my-projects/blo...
> and here :
>
https://github.com/GCorbel/comment-my-projects/blo....
>
> As you can see, I use acceptance DSL
>
(http://jeffkreeftmeijer.com/2011/acceptance-testin...)
> and factory girl (https://github.com/thoughtbot/factory_girl_rails).
>
> I hope to help you. It's very hard to begin.

From the link above you provided for acceptance testing I understand
that we write test cases for failing conditions first and then write the
code until the tests are passed. But one question that arise in my mind
is that in acceptance testing do we need to write tests for checking
blank values, no or no of chars for password field (like validations)??
For eg, if I am writing test cases for Forgot password feature, then I
write test cases as above what I have written. So as per the test cases
I would write code in controllers/models/views and make the test pass.
But do I also need to write test cases for scenarios like if Email field
is left blank and clicked submit button, then it should fail??
F8069adedbe2d37460c54eac8102351b?d=identicon&s=25 guirec c. (guirec_c)
on 2013-02-27 20:20
Personaly, I only create only the scenario when everything is ok (the
happy path). For controllers, models, etc... I test everything.

Acceptances specs are slow. Test everything in acceptances specs will
make your test suite very very very slow and I think it's useless.

It's only my opinion. Some developpers test with complete scenarios.
This topic is locked and can not be replied to.