или в rspec 3,

чание для будущих читателей: думаете, что 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 для упорядоченного хеш-равенства?

Ответы на вопрос(3)

Ваш ответ на вопрос