Porównywanie tabel z użyciem Culerity

Jakby ktoś chciał porównywać tabele podczas testów Cucumber+Celerity/Culerity to napisałem takiego małego helpera:

def culerity_table(table) returning table.method_missing('to_a') do |c| c.map! { |s| (eval s).to_a } max_size = c.collect { |r| r.size }.max c.each { |row| row[max_size] = nil } end end
Wywołujemy np.:

Then /^I should see the following sellers:$/ do |expected_sellers_table| expected_sellers_table.diff!(culerity_table($browser.table(:index => 1))) end
Po co to? Gdyż dziwnie zachowuje się metoda to_a w przypadku CulerityProxyObject (czy jakoś tak).
Culerity dostarcza pomostu pomiędzy Celerity pracującym na JRUby a Cucumberem na Rubym. Wywołanie: $browser.table(:index => 1)
dostarcza nam jakąś tablicę obiektów typu Culerity::RemoteObjectProxy ( http://rdoc.info/rdoc/langalex/culerity/blob/9f1280ef585c63693d420eb6b71caed8eaad872a/Culerity/RemoteObjectProxy.html ). Ten helperek przekształca te obiekty w coś co jest łykalne przez diff! webrata

To ja też się podzielę czymś przydatnym przy tabelach:

[code]Then /^I should see “([^”]+)" in (\d+)(?:st|nd|rd|th)? row of “([^”]*)" column$/ do |text, row, column_name|
doc = Nokogiri::HTML($browser.document.asXml)

column = nil
doc.css(“table tr th”).each_with_index { |th, i| column = i if th.content =~ /#{column_name}/ }
unless column
puts doc.css(“table”).to_s
raise “Could not find #{column_name} column”
end

content = doc.css(“table tr:nth-child(#{row.to_i + 1}) td:nth-child(#{column + 1})”).first.content.strip
unless content =~ /#{text}/
puts doc.css(“table”).to_s
raise “Could not find #{text} in #{row} row of #{column_name} column”
end
end[/code]
Używamy na przykład:

  Then I should see "Awesome!" in 2nd row of "Title" column

Jak łatwo zauważyć do działania wymagane nokogiri