Я бы написал собственный помощник RSpec, если вы хотите, чтобы он читался более четко и состоял всего из 1 строки. Предположим, у нас есть следующий класс, который мы хотим протестировать:
class MyObject
attr_accessor :first, :last, :phone
def initialize first = nil, last = nil, phone = nil
self.first = first
self.last = last
self.phone = phone
end
end
Мы могли бы написать следующий сопоставитель:
RSpec::Matchers.define :have_value do |attribute, expected|
match do |obj|
obj.send(attribute) == expected
end
description do
"have value #{expected} for attribute #{attribute}"
end
end
Затем, чтобы написать тесты, мы могли бы сделать что-то вроде:
describe MyObject do
h = {:first => 'wes', :last => 'bailey', :phone => '111.111.1111'}
subject { MyObject.new h[:first], h[:last], h[:phone] }
h.each do |k,v|
it { should have_value k, v}
end
end
Если вы поместите все это в файл с вызовом matcher.rb и запустите его, вы получите следующее:
> rspec -cfn matcher.rb
MyObject
should have value wes for attribute first
should have value bailey for attribute last
should have value 111.111.1111 for attribute phone
Finished in 0.00143 seconds
3 examples, 0 failures
person
Wes
schedule
14.04.2011
it
и использовать.should ==
для каждого атрибута? - person Dogbert   schedule 14.04.2011