Я немного не понимаю, как написать спецификацию RSpec 3.2.x, которая проверяет, содержит ли список, содержащий хотя бы один элемент, который удовлетворяет условию.RSpec matcher, который проверяет коллекцию, чтобы включить элемент, который удовлетворяет лямбда
Вот пример:
model = Invoice.new
model.name = 'test'
changes = model.changes
expect(changes).to include { |x| x.key == 'name' && x.value == 'test' }
Там будет и другие (автоматизированное) изменения в списке изменений тоже, так что я не хочу, чтобы убедиться, что есть только один конкретные изменения, и я тоже не хочу полагаться на заказ expect(changes.first)...
, поэтому мне в основном нужен способ указать, что хотя бы одно изменение в списке удовлетворяет условию.
я мог бы сделать что-то вроде этого:
result = changes.any? { |x| x.key == 'name' .. }
expect(result).to eq(true)
Но тогда RSpec неудача не даст мне никакого значимого вывода, так я думал, что там должен быть встроенный способ соответствовать этому.
Любые другие предложения о том, как структурировать тест, также приветствуются.
Edit: Чтобы было ясно - эти изменения список ChangeObject, поэтому мне нужно, чтобы получить доступ к их .key
и .value
методу
Отлично. Я не знал о 'an_object_having_attributes'. Спасибо! – Tigraine
Это псевдоним 'has_attributes', нового совпадения, введенного в RSpec 3.1: http://rspec.info/blog/2014/09/rspec-3-1-has-been-released/#expectations-new-haveattributes- согласовани –