1

次のステップがあります。

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

そして、次のステップ定義があります。

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

もしそうなら、私はputs table_results得る:

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

expected_table と table_results を比較するために、これを試してみました。

expected_table.diff!(table_results)

しかし、私はこのエラーが発生します:

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

テーブルをレンダリングしているビューが次のようになっていることに注意してください。

<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>

私は何を間違っていますか?

4

1 に答える 1

2

Cucumber bookから、table#diff!メソッドについて:

行と列を表す配列の配列であると予想される単一の引数を取ります。すべての値が等しい場合、ステップ定義は合格です。そうでない場合、ステップ定義は失敗し、差分が出力されます。

したがって、次のような配列の配列に Capybara テーブルをマップする必要があります。

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

これを試してみる必要があるかもしれません.これを行うための正確なカピバラの方法をすぐに思いつくことはできません. 目的は、Capybara 要素を次と同等の配列の配列に変換することです。

table_result = [
    ['Sport Type', 'Zip Code', 'Description'],
    ['Extreme Ironing', '12345', 'Participants perform ironing tasks in improbably extreme surroundings'],
    # etc - whatever is on the page
]
于 2012-04-10T06:10:10.453 に答える