Forum: RSpec testing controllers using cucumber

Posted by Amit Kulkarni (ak123)
on 2010-01-29 12:53
Hello,
Is there any way to test controllers using cucumber.
I was doing it with rspec but since cucumber's description is good how
can i proceed testing it with cucumber?
For e.g.
I have a scenario of user creation like
Feature: User Scenarios

  Scenario: Successfull creation of user
    Given a new user
    When the user fill all the mandatory details
    Then that user should get created
    And success message should get displayed and email should be sent
for activation

In step definition:
Given /^a new user$/ do
end

When /^the user fill all the mandatory details$/ do
end

When /^that user should get created$/ do
end

Then /^success message should get displayed and email should be sent for
activation$/ do
end

In this how i need to call the users controller and in that create
method.
Also i searched in the net but didn't found any examples for cucumber
testing controllers.
Please suggest
Posted by Matt Patterson (Guest)
on 2010-01-29 13:17
(Received via mailing list)
On 29 Jan 2010, at 11:53, Amit Kulkarni wrote:

> Hello,
> Is there any way to test controllers using cucumber.
> I was doing it with rspec but since cucumber's description is good how
> can i proceed testing it with cucumber?

Hi Amit. There's a Cucumber specific mailing list at 
http://groups.google.com/group/cukes?pli=1, which is a better place to 
ask Cucumbetr questions.

With Cucumber, you don't tend to test controllers directly, instead 
you're testing the whole app, much like Rails' own Integration Tests.

> For e.g.
> I have a scenario of user creation like
> Feature: User Scenarios
> 
>  Scenario: Successfull creation of user
>    Given a new user
>    When the user fill all the mandatory details
>    Then that user should get created
>    And success message should get displayed and email should be sent
> for activation


So, your example might be implemented like this:


Given /^I'm on the new user page$/ do
  visit new_user_path
end

When /^I fill all the mandatory details$/ do
  fill_in("name", :with =>"Joe")
end

Then /^that user should get created$/ do
  User.find_by_name("Joe").should_not be_nil
end

> In this how i need to call the users controller and in that create
> method.
> Also i searched in the net but didn't found any examples for cucumber
> testing controllers.

There are lots of examples on the Cucumber site http://cukes.info/

HTH

Matt

--
  Matt Patterson | Design & Code
  <matt at reprocessed org> | http://www.reprocessed.org/
Posted by Amit Kulkarni (ak123)
on 2010-02-01 10:30
Oh ok.
From your code it seems that we are checking the whole app as you 
mentioned.
I have tested controllers using rspec.
So i am not getting which is better to use.
Since with Rspec we test the objects and here using cucumber(good for 
writing scenarios and understanding)we are testing the GUI part(using 
webrat).
So which is good to use and more effective
Posted by Steve Ross (cwd)
on 2010-02-01 18:50
(Received via mailing list)
On Feb 1, 2010, at 1:30 AM, Amit Kulkarni wrote:
> 
> Oh ok.
>> From your code it seems that we are checking the whole app as you 
> mentioned.
> I have tested controllers using rspec.
> So i am not getting which is better to use.
> Since with Rspec we test the objects and here using cucumber(good for 
> writing scenarios and understanding)we are testing the GUI part(using 
> webrat).
> So which is good to use and more effective

>From my perspective, and this is just opinion, it depends on how granular you want your test and how fast it has to run. If you want to test the whole stack, then Cuke is great and it *will* exercise the controller. However, it does it more in the way a user might and can miss some edge cases. However, if you have a set of very specific behaviors like how a controller should respond to various mime types or what exceptions might be raised in certain circumstances, it might be better done using rSpec. Also, typically, a given rSpec test is faster because it doesn't have to load the whole Rails stack and you can mock or stub irrelevant parts.

Just my $.02.
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.