2015-08-07 2 views
1

RSpec 3 предоставляет all matcher. Например,Есть ли способ в RSpec дать «не» более высокий приоритет, чем все совпадения?

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

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

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

Но как выразить "всем не"?

+0

Я думаю, что вы имеете в виду 'include', а не' contain', поэтому редактирование соответственно. –

ответ

1

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

RSpec::Matchers.define_negated_matcher :exclude, :include 

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

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

Это хорошая альтернатива. Он имеет чистую и простую семантику. –

0

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

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

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