Есть ли способ в RSpec дать "не" более высокий приоритет, чем все сопоставители?

RSpec 3 обеспечивает все совпадения. Например,

expect(['Tom', 'Tony', 'Rosa']).to all( include("o") )

Вы также можете иметь

expect(['Tom', 'Tony', 'Rosa']).to_not all( include("o") )

Но как вы выражаете "всем нет"?

2 ответа

Решение

Определите отрицательную версию средства сопоставления, с которым вы хотите проверить каждый элемент списка, например,

RSpec::Matchers.define_negated_matcher :exclude, :include

и использовать его как

expect(%w(Tom Tony Rosa)).to all(exclude('o'))

Согласно документации и быстрому прочтению кода, похоже, нет встроенного all_not matcher, так что для достижения результата нужно выполнить итерацию по массиву следующим образом:

['Tom', 'Tony', 'Rosa'].each { |name| expect(name).to_not contain('o') }

Вы можете просмотреть встроенные совпадения, в том числе all по адресу https://github.com/rspec/rspec-expectations/blob/9ff22694fa88cb0b0e794b6f99f3cfacfa909bf4/lib/rspec/matchers/built_in/all.rb

Другие вопросы по тегам