Getting specific error info from Cucumber?

Hi all… I have just gotten started with Cucumber and excited about it. But am hitting a problem where I have scenarios failing but the output seems almost useless - all it does is tell me which scenarios failed but not where in the scenario it failed. How does one go about figuring out where things are going wrong? Is there a verbose option?

For example on this failing (and very simple) scenario (which I can not remove enough steps to get it to pass):

Feature: Login logout of system

Scenario: Login When I am on the login page Then I should see “Lender Login”

When I ‘rake cucumber’ it fails, I have no idea if the problem is syntax, routes, something with capybara, data (well not in this case), or just that my app does not work. I know I can go to a browser and get this page to load so I know it is not the latter.

I am not concerned with this specific example per se but to any hints as to a working strategy to troubleshoot scenarios under Cucumber and be able to move past failures.

Thanks,

David

David Kahn wrote:

Hi all.... I have just gotten started with Cucumber and excited about it. But am hitting a problem where I have scenarios failing but the output seems almost useless - all it does is tell me which scenarios failed but not where in the scenario it failed. How does one go about figuring out where things are going wrong? Is there a verbose option?

You know, if you're going to complain about the output, the least you could do is show us the output you're getting... :slight_smile:

For example on this failing (and very simple) scenario (which I can not remove enough steps to get it to pass):

That suggests a Cucumber setup issue.

Feature: Login logout of system

  Scenario: Login     When I am on the login page     Then I should see "Lender Login"

When I 'rake cucumber' it fails,

Fails how? What do you see?

Best,

You know, if you’re going to complain about the output, the least you could do is show us the output you’re getting… :slight_smile:

Here goes:

/Users/DK/.rvm/rubies/ruby-1.8.7-p174/bin/ruby -I “/Users/DK/.rvm/gems/ruby-1.8.7-p174/gems/cucumber-0.8.5/lib:lib” “/Users/DK/.rvm/gems/ruby-1.8.7-p174/gems/cucumber-0.8.5/bin/cucumber” --profile default Using the default profile… F-----F–

Failing Scenarios: cucumber features/create_comparison.feature:6 # Scenario: Comparisons List cucumber features/login_logout.feature:3 # Scenario: Login

2 scenarios (2 failed) 7 steps (7 skipped) 0m0.042s rake aborted! Command failed with status (1): [/Users/DK/.rvm/rubies/ruby-1.8.7-p174/bin/…]

(See full trace by running task with --trace) DKMac:creditcompare DK$

David Kahn wrote:

You know, if you're going to complain about the output, the least you could do is show us the output you're getting... :slight_smile:

Here goes:

/Users/DK/.rvm/rubies/ruby-1.8.7-p174/bin/ruby -I "/Users/DK/.rvm/gems/ruby-1.8.7-p174/gems/cucumber-0.8.5/lib:lib" "/Users/DK/.rvm/gems/ruby-1.8.7-p174/gems/cucumber-0.8.5/bin/cucumber" --profile default Using the default profile... F-----F--

Failing Scenarios: cucumber features/create_comparison.feature:6 # Scenario: Comparisons List cucumber features/login_logout.feature:3 # Scenario: Login

2 scenarios (2 failed) 7 steps (7 skipped) 0m0.042s rake aborted! Command failed with status (1): [/Users/DK/.rvm/rubies/ruby-1.8.7-p174/bin/...]

That does look rather terse -- but notice that all your steps are showing up as skipped. I'd say you've got a configuration issue. Check your cucumber setup.

(See full trace by running task with --trace) DKMac:creditcompare DK$

On Wed, Sep 15, 2010 at 5:06 PM, Marnen Laibow-Koser

Best,

That does look rather terse – but notice that all your steps are showing up as skipped. I’d say you’ve got a configuration issue. Check your cucumber setup. So it was a configuration error, having to do with my discovery that the config/environment/cucumber.rb environment which was missing some app specific constants, which in turn was causing my loading of fixtures to fail (albeit unreported). Now another issue: I have my test::unit fixtures loading and confirmed (this is a legacy app). However they can not seem to be accessed from the code. This is what is in env.rb to load them: Before do Fixtures.reset_cache fixtures_folder = File.join(RAILS_ROOT, ‘test’, ‘fixtures’) fixtures = Dir[File.join(fixtures_folder, ‘*.yml’)].map {|f| File.basename(f, ‘.yml’) } Fixtures.create_fixtures(fixtures_folder, fixtures) end Then for example, in the cucumber step below, when I set the debugger, I can find, the specific users fixture through Fixtures.all_loaded_fixtures[“users”][“sysadmin_user_one”] But I can not get at its data (maybe you can tell me how to get at a class attribute inside a fixture object): (rdb:1) Fixtures.all_loaded_fixtures[“users”][“sysadmin_user_one”] #<Fixture:0x47776a4 @model_class=User(id: integer, login: string, first_name: string, last_name: string, email: string, role_id: integer, hashed_password: string, salt: string, created_at: datetime, updated_at: datetime, enabled: boolean, account_id: integer, email_upon_upload: boolean), @fixture={“salt”=>987654, “created_at”=>“2010-09-16 18:13:09”, “updated_at”=>“2010-09-16 18:13:09”, “role_id”=>1033329129, “hashed_password”=>“501d40d3a18d954855335c06bd56d47f8f5d4adc”, “id”=>1067249891, “enabled”=>true, “last_name”=>“One”, “login”=>“sysadminone”, “email”=>“sysadminone@gmail.com”, “first_name”=>“Sysadmin”},

And using “users(:user_name)” as I would in Test::Unit does not work - this is where the step is failing.

I hope this is not as disgusting as I am making it… am I fighting the universe (or in this case Cucumber::Rails::World) on this?

Given /^I am logged in as a sysadmin user$/ do user = users(:sysadmin_user_one) visit(‘/login’) fill_in(‘login’, user.login) fill_in(‘password’, ‘password1’) click_button(‘Log in’) I should see ‘Welcome Sysadmin One’ end

Thanks,

David

David Kahn wrote:

That does look rather terse -- but notice that all your steps are showing up as skipped. I'd say you've got a configuration issue. Check your cucumber setup.

So it was a configuration error, having to do with my discovery that the config/environment/cucumber.rb environment which was missing some app specific constants, which in turn was causing my loading of fixtures to fail (albeit unreported).

Now another issue: I have my test::unit fixtures loading and confirmed (this is a legacy app). However they can not seem to be accessed from the code.

Good. You shouldn't be using fixtures in Cucumber -- or indeed at all. The feature, as implemented in Rails, is broken and should be avoided at all costs.

Use factories instead (either Machinist or Factory Girl will work). For integration of factories and Cucumber, Pickle works well.

[...]

I hope this is not as disgusting as I am making it... am I fighting the universe (or in this case Cucumber::Rails::World) on this?

Given /^I am logged in as a sysadmin user$/ do   user = users(:sysadmin_user_one)   visit('/login')   fill_in('login', user.login)   fill_in('password', 'password1')   click_button('Log in')   I should see 'Welcome Sysadmin One' end

That step looks good, except for the use of fixtures.

Thanks,

David

Best,

Fixtures work great for me.

But if the sky is falling for you..

Fixtures work great for me.

Greg, so you are able to load and use fixtures on cucumber on Rails3/1.9.2? Would you mind sharing how you load them in config and access them?

David

Never mind. I just found this: http://wiki.github.com/aslakhellesoy/cucumber/fixtures Which states: …you can access your fixture data from the database using Model.find. Example to find the first User model you’d use User.find(:first).

So I was just trying to use the Test::Unit way – users{:sysadminone), vs User.find_by_login(‘sysadminone’) – and that was the problem. Works right on.

Greg Donald wrote:

Good. �You shouldn't be using fixtures in Cucumber -- or indeed at all. The feature, as implemented in Rails, is broken and should be avoided at all costs.

Fixtures work great for me.

Have you tried factories? They work even better.

But if the sky is falling for you..

I guess ignorance is bliss.

-- Greg Donald destiney.com | gregdonald.com

Best,