65

次のようなテストがあります。

it "should not indicate backwards jumps if the checker position is not a king" do
    board = Board.new
    game_board = board.create_test_board
    board.add_checker(game_board, :red, 3, 3)
    x_coord = 3
    y_coord = 3
    jump_locations = {}
    jump_locations["upper_left"]  = true 
    jump_locations["upper_right"] = false 
    jump_locations["lower_left"]  = false
    jump_locations["lower_right"] = true
    adjusted_jump_locations = @bs.adjust_jump_locations_if_not_king(game_board, x_coord, y_coord, jump_locations)
    adjusted_jump_locations["upper_left"].should == true 
    adjusted_jump_locations["upper_right"].should == false 
    adjusted_jump_locations["lower_left"].should == false
    adjusted_jump_locations["lower_right"].should == false
  end 

これは冗長です。私の期待を述べるより簡潔な方法はありますか?私はドキュメントを見てきましたが、私の期待を圧縮する場所がわかりません。ありがとう。

4

4 に答える 4

108

ハッシュに対しても機能します。

expect(jump_locations).to include(
  "upper_left"  => true,
  "upper_right" => false,
  "lower_left"  => false,
  "lower_right" => true
)

出典: includematcher @ relishapp.com

于 2011-12-05T23:14:29.803 に答える
36

@Davidの回答に追加したいだけです。includeハッシュでマッチャーをネストして使用できます。例えば:

# Pass
expect({
  "num" => 5, 
  "a" => { 
    "b" => [3, 4, 5] 
  }
}).to include({
  "num" => a_value_between(3, 10), 
  "a" => {
    "b" => be_an(Array)
  }
})

注意: ネストされたincludeハッシュはすべてのキーをテストする必要があります。そうしないと、テストが失敗します。例:

# Fail
expect({
  "a" => { 
    "b" => 1,
    "c" => 2
  }
}).to include({
  "a" => {
    "b" => 1
  }
})
于 2015-03-25T05:31:21.953 に答える