Примечание для будущих читателей: думаете, RSpec не считает ваши хэши равными?Одним из них может быть OrderedHash, но из обычного вывода RSpec вы не можете сказать.Это была проблема, которая вызвала этот пост.
Оригинальный вопрос:
Предположим, у меня есть спецификация, в которой я хочу проверить, что метод генерирует соответствующий хеш.
it 'should generate the Hash correctly' do
expected = {:foo => 1, 'baz' => 2}
subject.some_method_that_should_generate_the_hash.should == expected
end
Это часто терпит неудачу, потому что разные Хэши с одинаковыми парами ключ-значение могут возвращать свои пары в другом порядке.Результаты выглядят так:
Failure/Error: subject.some_method_that_should_generate_the_hash.should == expected
expected: {:foo => 1, 'baz' => 2},
got: {'baz' => 2, :foo => 1}
Для массивов это решается с помощью оператора = ~.Тем не менее, это не работает для хэшей.На данный момент я прибег к
it 'should generate the Hash correctly' do
expected = {:foo => 1, 'baz' => 2}
subject.some_method_that_should_generate_the_hash.each {|k,v|
v.should == expected[k]
}
end
, но это кажется излишне многословным.Я ожидаю, что будет очевидное решение для этого.Я что-то пропускаю в документах или в RSpec нет подходящего Matcher для упорядоченного хеш-равенства?