Testing hash contents using RSpec

steve_gallagher picture steve_gallagher · Dec 5, 2011 · Viewed 45.1k times · Source

I have a test like so:

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 

which, I know, is verbose. Is there a more concise way to state my expectations. I've looked at the docs but I can't see where to compress my expectations. Thanks.

Answer

David Chelimsky picture David Chelimsky · Dec 6, 2011

http://rubydoc.info/gems/rspec-expectations/RSpec/Matchers:include

It works for hashes too:

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