1

キュウリの 3 列のインライン データ テーブルからデータを読み込もうとしています。

機能ファイル:

Then  I should see grades,exteriors, interiors and engines available:
  |grades            |exteriors         |  engine |
  |xdata-id-Elegance |xdata-id-NH-788p  |  12345  |
  |                  |xdata-id-NH737M   |         |
  |                  |xdata-id-NH731P   |         |
  |                  |xdata-id-R-539P   |         |

ステップ定義:

 Then(/^I should see grades,exteriors, interiors and engines available:$/) do |table|
      data = table.rows_hash
      puts data['exteriors']
    end

これにより、2行のみが許可されるというエラーが表示されます。

テーブルオブジェクトを使用して3つの列すべてにアクセスできる別の方法を知っている人はいますか?

4

4 に答える 4

3

3列のデータテーブルを次のように使用して、より簡単な方法で私のために働きました:

  Scenario: I am able to select a date range

    Given I am on the rejections tracker page as a superuser
    Then the date range filters work as expected
      | dateFrom   | dateTo     | variance    |
      | 12/05/2014 | null       | lesser than |
      | null       | 12/07/2014 | lesser than |
      | null       | null       | equal to    |

これは私のために働く:

    Then(/^the date range filters work as expected$/) do |table|

      data = table.hashes
      date_from = []
      date_to = []
      variance = []

      data.each do |row|
        row.each do |key, value|
          if key.eql? "dateFrom"
            date_from << value
          elsif key.eql? "dateTo"
            date_to << value
          elsif key.eql? "variance"
            variance << value
          end
        end
      end

      puts date_from
      puts date_to
      puts variance
   end

出力:

  ["12/05/2014", "null", "null"]
  ["null", "12/07/2014", "null"]
  ["lesser than", "lesser than", "equal to"]
于 2016-04-29T13:51:14.093 に答える
2

を使用rawしてテーブルを取得し、Ruby を使用してそれを操作して必要な形式にすることができます。

たとえば、次の例は、テーブルを取得して、キーが列ヘッダーであり、値がその列の値の配列であるハッシュに変換する方法を示しています。

Then(/^I should see grades,exteriors, interiors and engines available:$/) do |table|
    data = table.transpose.raw.inject({}) do |hash, column| 
        column.reject!(&:empty?)
        hash[column.shift] = column
        hash    
    end

    p data['grades']
    #=> ["xdata-id-Elegance"]
    p data['exteriors']
    #=> ["xdata-id-NH-788p", "xdata-id-NH737M", "xdata-id-NH731P", "xdata-id-R-539P"]
    p data['engine']
    #=> ["12345"]
end
于 2013-11-11T15:52:35.133 に答える
0

私はテーブルを少し違った方法で使用しました。

「table.hashes」は、テーブルの行を配列に分割するため、簡単にアクセスできます。

したがって、次のように最初の行にアクセスできます。

puts data[0]

結果: {"grades"=>"xdata-id-Elegance", "exteriors"=>"xdata-id-NH-788p", "engine"="="12345"}

次に、オブジェクトを繰り返し処理し、次のように「.each」を使用してすべてを出力できます。

data.each do |row|
puts row
end

これは基本的に、テーブルのすべての値を配列 (行) にグループ化して出力します。したがって、前述の結果の束。

キーに直接アクセスする可能性もあります。これは、最初に必要なものです。次のようにしてください。

data.each do |row|
puts row["exteriors"]
end

その列の値のみを出力します。

于 2016-11-29T13:19:17.117 に答える
0

メソッドは、特定のrows_hashタイプのテーブル用です。具体的には、2 つの列があり、左側の列に見出しがあるテーブル用です。例えば:

|grades   |xdata-id-Elegance|
|exteriors|xdata-id-NH-788p |
|engine   |12345            |

ただし、データは複数の行にあるため、正しいタイプのテーブルを使用しています。

代わりに通常のhashes方法を使用できます。これにより、ハッシュの配列が返され、そこから必要なデータが抽出されます。例えば:

Then(/^I should see grades,exteriors, interiors and engines available:$/) do |table|
  data = table.hashes

  exteriors = []

  data.each do |row|
    row.each do |key, value|
      exteriors << value if key == 'exteriors'
    end
  end

  puts exteriors
end

このコードは、呼び出された空の配列を作成exteriorsし、配列内の各値を反復処理しますdata。これは、元のテーブルの非ヘッダー行に対応するハッシュになります。これらの各ハッシュは、見出しをキーとして使用して、テーブル内の行の 1 つの値を表します。

テーブルのヘッダー以外の行ごとに、ハッシュを反復処理し、exteriors配列にデータを入力します。

于 2015-11-19T15:08:30.053 に答える