ruby - rails - rspec not null
Prueba de contenido hash utilizando RSpec (4)
Tengo una prueba como esta:
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
que, lo sé, es detallado. ¿Hay una manera más concisa de expresar mis expectativas? Miré los documentos pero no puedo ver dónde comprimir mis expectativas. Gracias.
La sintaxis ha cambiado para RSpec 3, pero incluir matcher sigue siendo el mismo:
expect(jump_locations).to include(
"upper_left" => true,
"upper_right" => false,
"lower_left" => false,
"lower_right" => true
)
Otra manera fácil de probar si todo el contenido es un hash es verificar si el contenido es el mismo objeto hash:
it ''is to be a Hash Object'' do
workbook = {name: ''A'', address: ''La''}
expect(workbook.is_a?(Hash)).to be_truthy
end
Solo quiero agregar a la respuesta de @ David. Puede anidar y usar emparejamientos en su hash de include
. Por ejemplo:
# Pass
expect({
"num" => 5,
"a" => {
"b" => [3, 4, 5]
}
}).to include({
"num" => a_value_between(3, 10),
"a" => {
"b" => be_an(Array)
}
})
Una advertencia: un hash de include
anidado debe probar todas las claves o la prueba fallará, por ejemplo:
# Fail
expect({
"a" => {
"b" => 1,
"c" => 2
}
}).to include({
"a" => {
"b" => 1
}
})
http://rubydoc.info/gems/rspec-expectations/RSpec/Matchers:include
Funciona también para hashes:
jump_locations.should include(
"upper_left" => true,
"upper_right" => false,
"lower_left" => false,
"lower_right" => true
)