RSpe c соответствует массиву хэшей от VCR - PullRequest
1 голос
/ 24 февраля 2020

В результате моей кассеты VCR у меня есть массив хэшей:

[{
  'key' => 'TP-123',
  'status:' => 'test'
},
{
  'key' => 'TP-124',
  'status:' => 'test'
},
{
  'key' => 'TP-125',
  'status:' => 'test'
},
{
  'key' => 'TP-126',
  'status:' => 'test'
},
]

Я хочу проверить, есть ли ха sh с 'key' => 'TPFJT-41 '

expect(fetcher).not_to include('key' => 'TPFJT-41')

кажется, что он не перебирает весь массив хэшей, но принимает первое значение - когда я изменяю его на:

expect(fetcher).not_to include('key' => 'TP-126')

пройдет либо

1 Ответ

4 голосов
/ 24 февраля 2020

кажется, что он не перебирает весь массив хэшей, но принимает первое значение

Нет. Это не принимает только первое значение. И это действительно повторяется. Проблема в том, что вы ожидаете, что include matcher сделает то, что он делает , а не на самом деле. Он не достаточно умен, чтобы просматривать вложенные объекты :). При применении к массиву он просто проверяет, существует ли * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

. ха sh {'key' => 'TPFJT-41'} существует или нет. Очевидно, что это не так, поэтому ваше отрицательное ожидание всегда зеленое (но значение c нарушено).

Один из способов исправить это - преобразовать результат перед проверкой. Например, что-то вроде следующего должно работать:

expect(fetcher.map { |h| h['key'] }).not_to include('TPFJT-41')
...