2017-01-18 10 views
0

これと少し出かけるかもしれません。メソッドからランダムハッシュを選択してください。Ruby

私はRubyでCucumber Capybaraを使用しています。特定のデータのハッシュをいくつか作成し、そのハッシュのうちの1つをランダムに選択するテストを受けたいと思います。これはできますか?

ハッシュ含む私の方法:

def random_vehicles 


a1 = {:vrm => 'A1', 
     :id => '11111111111', 
     :post_code => 'AA11AA' 
    } 

b1 = {:vrm => 'B1', 
     :id => '22222222222', 
     :post_code => 'BB11BB' 
    } 

end 

どのように私はランダムにそのメソッド内の2つのハッシュのいずれかを選択することができますか?以下のような:

sample = random_vehicles.sample # This doesn't work 

おかげ

+0

あなたが説明していただけますか?これは、それを知らずに有効な質問ですが、私は非常に興味があります。なぜなら、テストでのランダムな振る舞いは、通常、避けてはいけないことであるからです。 –

+0

私が望んだのは、特定のレコードをガーキンのステップにハードコーディングせずに、テストを開始するためにウェブページの特定のポイントにアクセスするための有効なデータを入力することでした。私はそれを少しダイナミックにしようと思ったので、複数のレコードが入力されています。だから私は、私がログインしていることを考えると、このページをテストすることができます。 – Tom

答えて

2

を試してみてくださいここでは、あなたの最初のrandom_vehicles.sampleが動作するようにするためにメソッドを修正することができる方法は次のとおりです。

def random_vehicles 
    [ 
    {:vrm => 'A1', 
     :id => '11111111111', 
     :post_code => 'AA11AA' 
    }, 
    {:vrm => 'B1', 
     :id => '22222222222', 
     :post_code => 'BB11BB' 
    } 
    ] 
end 

random_vehicles.sample 
#=> {:vrm=>"B1", :id=>"22222222222", :post_code=>"BB11BB"} 
random_vehicles.sample 
#=> {:vrm=>"A1", :id=>"11111111111", :post_code=>"AA11AA"} 

注メソッド名があること重要:それは実際にメソッドが返すものに依存します。この場合、メソッド名はsample_vehicles(複数)です。したがって、オブジェクトのコレクションを返すというのは当然です。

あなたが方法を変更し、名前を変更しなければならないよりも、あなたは、それがすでに車両を返却する必要がある場合:あなたは、テスト中にランダムデータのどちらかを選択する理由

def random_vehicle 
    [ 
    {:vrm => 'A1', 
     :id => '11111111111', 
     :post_code => 'AA11AA' 
    }, 
    {:vrm => 'B1', 
     :id => '22222222222', 
     :post_code => 'BB11BB' 
    } 
    ].sample 
end 

random_vehicle 
#=> {:vrm=>"B1", :id=>"22222222222", :post_code=>"BB11BB"} 
random_vehicle 
#=> {:vrm=>"B1", :id=>"22222222222", :post_code=>"BB11BB"} 
random_vehicle 
#=> {:vrm=>"A1", :id=>"11111111111", :post_code=>"AA11AA"} 
+1

ありがとう、この命名規則はこの例ではより理にかなっています – Tom

3

def random_vehicles 
    a1 = {:vrm => 'A1', 
     :id => '11111111111', 
     :post_code => 'AA11AA' 
    } 

    b1 = {:vrm => 'B1', 
     :id => '22222222222', 
     :post_code => 'BB11BB' 
    } 

    [a1, b1] 
end 

vehicles = random_vehicles 
p vehicles.sample 
+0

これは、ハッシュ内のデータを選択するのに最適です。各ハッシュには特定のレコードに固有の3つのデータ項目が含まれているため、検証に合格するには3つすべてが必要です。ですから、私はランダムにa1かb1を選択してから、内部のデータとやりとりする必要があります。 – Tom

+1

私はコードを更新しました。 @アンドレイの答えは素晴らしいです:) – Ursus

+0

元の方法も働いて、私はIDEの私のコードで何かを間違っていた。あなたのお返事ありがとう – Tom

関連する問題