Как мне сопоставить глубоко в ха sh с Rspe c и получить разумные ошибки сопоставления? - PullRequest
0 голосов
/ 25 марта 2020

Я нахожусь в ситуации, когда пишу Rspe c ожидания, которые выглядят так:

expect(result['data']['register']['registered']).to be(false), result.inspect

Проблема в том, что чаще всего ошибка, которую я получаю, когда что-то идет не так:

undefined method `[]' for nil:NilClass

Я нашел этот лучший способ написать это:

expect(result.dig('data', 'register', 'registered')).to be(false), result.inspect

, который по крайней мере показывает результат result.inspect, но я думаю, что было бы что-то лучше, например:

expect(result).to dig('data', 'register', 'registered').and be(false), result.inspect

Я думал об использовании hash_including, но не мог заставить его работать. Я попытался:

expect(result).to eq(hash_including("data" => {"register" => {'registered' => be(false)}}))

или

expect(result).to eq(hash_including("data" => {"register" => {'registered' => false}}))

или

expect(result).to eq(hash_including("data" => hash_including("register" => hash_including('registered' => be(false)))))

или

expect(result).to eq(hash_including("data" => hash_including("register" => hash_including('registered' => false))))

или includes, выполнив:

expect(result).to include('data' => {'register' => {'registered' => false}})

или

expect(result['data']).to include('register' => {'registered' => false})

Ничто из этого не работает, а второе ужасно многословно ... даже первый, на мой взгляд, не так хорош, как dig, но я отвлекся .

1 Ответ

0 голосов
/ 25 марта 2020

Вы смотрели на хэш_включая ?

 a = {a: 2}
 c = {b: 4}
 expect(a).to eq(hash_including(c))

Вот вывод:

expected: hash_including(:b=>4)
got: {:a=>2}
...