run rails not matchers built array ruby rspec expectations

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 )

Ver built-in-matchers#include-matcher .


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 } })