2012-04-10 9 views
1

Ich habe den folgenden Schritt:Rails + Gurke + Capybara: Vergleichen erwartet Tabelle mit HTML-Tabelle

Then I should see the following games: 
    | soccer  | 94040  | "friendly" | 
    | basketball | 94050  | "competition"| 

Und ich habe die folgenden Schritt Definition:

Then /^I should see the following games:$/ do |expected_table| 
    table_results = page.find('#games_results_table') 
end 

Wenn ich puts table_results erhalte ich:

#<Capybara::Element tag="table" path="/html/body/div[2]/table"> 

Ich habe versucht, dies zu tun, um expected_table mit den table_results zu vergleichen:

expected_table.diff!(table_results) 

Aber ich bekomme diese Fehlermeldung:

undefined method `transpose' for #<Capybara::Element tag="table" path="/html/body/div[2]/table"> (NoMethodError) 

Beachten Sie, dass die Ansicht, dass die Tabelle rendert das ist:

<div class="page-header"> 
    <h1>Games</h1> 
    <table id="games_results_table" class="table table-striped"> 
    <tr> 
     <th>Sport Type</th> 
     <th>Zip Code</th> 
     <th>Description</th> 
    </tr> 
     <% @games.each do |game| %> 
     <tr> 
      <td><%= game.sport_type %></td> 
      <td><%= game.zip_code %></td> 
      <td><%= game.description %></td> 
     </tr> 
     <% end %> 
    </table> 
</div> 

Was mache ich falsch?

Antwort

2

Von the Cucumber book auf der table#diff! Methode:

It takes a single argument which it expects to be an Array of Array representing rows and columns. If all the values are equal, the step definition passes. If not, the step definition fails and a diff is printed out.

So müssen Sie Ihre Capybara-Tabelle in ein Array von Arrays abzubilden, so etwas wie:

table_results = page.find('#games_results_table tr').map do |row| 
    row.children.map do |cell| 
     cell.text 
    end 
end 

Sie können mit diesem haben, experimentieren - Ich kann nicht über die genauen Capybara-Methoden denken, um dies zu tun. Das Ziel ist es, das Capybara Element in ein Array von Arrays äquivalent zu drehen:

table_result = [ 
    ['Sport Type', 'Zip Code', 'Description'], 
    ['Extreme Ironing', '12345', 'Participants perform ironing tasks in improbably extreme surroundings'], 
    # etc - whatever is on the page 
] 
+0

dieses [GIST] (https://gist.github.com/denmarkin/1334262) stellt ein Arbeitsbeispiel für den Vergleich in einer Tabelle Ihre Funktion in einer Tabelle in Ihrem generierten HTML. – Ritchie

Verwandte Themen