[cucumber] noob Q deleteing from a list


#1

manage_froobles.feature

Scenario: Delete frooble
Given the following froobles:
|name|color|description|
|name 1|color 1|description 1|
|name 2|color 2|description 2|
|name 3|color 3|description 3|
|name 4|color 4|description 4|
When I delete the 3rd frooble
Then I should see the following froobles:
|name|color|description|
|name 1|color 1|description 1|
|name 2|color 2|description 2|
|name 4|color 4|description 4|


froobles_steps.rb

When /^I delete the (\d+)(?:st|nd|rd|th) frooble$/ do |pos|
visit froobles_url
within(“table > tr:nth-child(#{pos.to_i+1})”) do
click_link “Destroy”
end
end

Then /^I should see the following froobles:$/ do |froobles|
froobles.raw[1…-1].each_with_index do |row, i|
row.each_with_index do |cell, j|
response.should have_selector(“table > tr:nth-child(#{i+2}) >
td:nth-child(#{j+1})”) { |td|
td.inner_text.should == cell
}
end
end
end

I want to show a definition list instead of a table.

index.html

description 1
show | edit| destroy
description 2
show | edit| destroy

so I’m trying
manage_froobles.feature

Scenario: Delete frooble
Given the following froobles:
|description|
|description 1|
|description 2|
|description 3|
|description 4|
When I delete the 3rd frooble
Then I should see the following froobles:
|description|
|description 1|
|description 2|
|description 4|


froobles_steps.rb

When /^I delete the (\d+)(?:st|nd|rd|th) frooble$/ do |pos|
visit froobles_url
within(“dl:nth-child(#{pos.to_i})”) do
click_link “Destroy”
end
end
(this passes but I really don’t know if it’s “clicking” the destroy
link on the third list item.)

Then /^I should see the following froobles:$/ do |froobles|
tasks.raw[1…-1].each_with_index do |row, i|
response.should have_selector(“dl:nth-child(#{i+3})”) { |td|
td.inner_text.should == row
}
end
end
(this fails)

I can follow the logic of the table but for some reason I can’t write
this test for a list.

Any help would be appreciated.

John


#2

On Thu, Feb 26, 2009 at 12:03 AM, John I. removed_email_address@domain.invalid
wrote:

Then I should see the following froobles:
within(“table > tr:nth-child(#{pos.to_i+1})”) do
}

show | edit| destroy

|description 1|

3 possibilities:

  1. It’s clicking the right link, but your next page renders wrong
  2. It’s clicking the right link, but your next page renders correctly,
    but your Then is buggy
  3. It’s not clicking the right link

In order to find out which one it is…

Then /^I should see the following froobles:$/ do |froobles|

Do this here:

puts response.body

Aslak


#3

On Thu, Feb 26, 2009 at 7:59 AM, aslak hellesoy
removed_email_address@domain.invalid wrote:

puts response.body

Another debugging technique we use is

When /^I view the response$/ do
Tempfile.open(“response”) do |file|
file.print response.body
open "file://#{file.path}"
sleep 2
end
end

///ark


#4

Mark W. wrote:

Tempfile.open(“response”) do |file|
http://rubyforge.org/mailman/listinfo/rspec-users

If you are using webrat and you want to see the HTML repsonse you can
use: save_and_open_page

-Ben


#5

John I. wrote:

frooble_steps.rb:12
/Library/Ruby/Gems/1.8/gems/webrat-0.4.0/lib/webrat/core/
should see the following froobles:$/’
features/list.feature:15:in `Then I should see the following
froobles:’

Again any help will be appreciated.

You are expecting a list in your test but you are getting back a
string.

///ark
rspec-users mailing list
removed_email_address@domain.invalid://rubyforge.org/mailman/listinfo/rspec-users


rspec-users mailing list
removed_email_address@domain.invalid
http://rubyforge.org/mailman/listinfo/rspec-users


Joseph W.
http://blog.josephwilk.net


#6

Thanks for all the help. With the
puts response.body
I was able so see what was going on. I know that I am now deleting the
third frooble!!!

Now when
Then I should see the following froobles:
I get this error

Then I should see the following froobles: # features/step_definitions/
frooble_steps.rb:12
expected: [“description 1”],
got: “description 1” (using ==)
Diff:
@@ -1,2 +1,2 @@
-[“description 1”]
+“description 1” (Spec::Expectations::ExpectationNotMetError)
./features/step_definitions/frooble_steps.rb:18:in Then /^I should see the following froobles:$/' /Library/Ruby/Gems/1.8/gems/webrat-0.4.0/lib/webrat/core/ matchers/have_xpath.rb:50:incall’
/Library/Ruby/Gems/1.8/gems/webrat-0.4.0/lib/webrat/core/
matchers/have_xpath.rb:50:in matches_nokogiri?' /Library/Ruby/Gems/1.8/gems/webrat-0.4.0/lib/webrat/core/ matchers/have_xpath.rb:15:inmatches?’
./features/step_definitions/frooble_steps.rb:17:in Then /^I should see the following froobles:$/' (eval):3:ineach_with_index’
./features/step_definitions/frooble_steps.rb:16:in each' ./features/step_definitions/frooble_steps.rb:16:ineach_with_index’
./features/step_definitions/frooble_steps.rb:16:in Then /^I should see the following froobles:$/' features/list.feature:15:inThen I should see the following
froobles:’

Again any help will be appreciated.

John