Testing hash contents using RSpec

后端 未结 4 580
南旧
南旧 2021-02-06 20:37

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_te         


        
相关标签:
4条回答
  • 2021-02-06 20:53

    Just wanna add to @David's answer. You could nest and use matchers in your include hash. For example:

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

    A caveat: a nested include hash must test all keys or the test will fail, e.g.:

    # Fail
    expect({
      "a" => { 
        "b" => 1,
        "c" => 2
      }
    }).to include({
      "a" => {
        "b" => 1
      }
    })
    
    0 讨论(0)
  • 2021-02-06 20:56

    Another easy way to test if the whole content is a Hash is to checkout if the content is the Hash Object itself:

    it 'is to be a Hash Object' do
        workbook = {name: 'A', address: 'La'}
        expect(workbook.is_a?(Hash)).to be_truthy
    end
    

    For the question above we can check as follow:

    expect(adjusted_jump_locations).to match(hash_including('upper_left' => true))
    
    0 讨论(0)
  • 2021-02-06 20:57

    Syntax has changed for RSpec 3, but include matcher is still the one:

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

    See built-in-matchers#include-matcher.

    0 讨论(0)
  • 2021-02-06 21:02

    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
    )
    
    0 讨论(0)
提交回复
热议问题