70 votes

Test du contenu des hachages à l'aide de RSpec

J'ai un test comme ça :

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 

ce qui, je sais, est verbeux. Existe-t-il un moyen plus concis d'exprimer mes attentes ? J'ai consulté la documentation, mais je ne vois pas où comprimer mes attentes. Merci.

114voto

David Chelimsky Points 6430

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

Cela fonctionne aussi pour les hachages :

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

38voto

zxzxlch Points 320

Je veux juste ajouter à la réponse de @David. Vous pouvez imbriquer et utiliser des matchers dans votre include dièse. Par exemple :

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

Une mise en garde : un élément imbriqué include hash doit tester toutes les clés ou le test échouera, par exemple :

# Fail
expect({
  "a" => { 
    "b" => 1,
    "c" => 2
  }
}).to include({
  "a" => {
    "b" => 1
  }
})

6voto

Marko Avlijaš Points 942

La syntaxe a changé pour RSpec 3, mais include matcher est toujours le même :

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

Voir matrices intégrées#include-matcher .

5voto

Kiry Meas Points 407

Un autre moyen simple de vérifier si l'ensemble du contenu est un hachage est de vérifier si le contenu est l'objet de hachage lui-même :

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

Pour la question ci-dessus, nous pouvons vérifier comme suit :

expect(adjusted_jump_locations).to match(hash_including('upper_left' => true))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X