Очень часто приходится проверять равенство сразу нескольких полей сразу, как-то так:
[:length, :width, :weight].each{|attr| val1[attr].should == val2[attr] }
то при ошибке в консоле вы увидите что-то вроде:
Failure/Error: [:length, :width, :weight].each{|attr| val1[attr].should == val2[attr] }
expected: 1.0
got: 1.9 (using ==)
то есть нипанятна вообще ничего, какое поле не совпало — хз (диагноз хоть и ясен, но детали неизвестны)
Но можно сделать и красиво, вот так:
[:length, :width, :weight].each{|attr| val1[attr].should eq(val2[attr]), "#{attr} attribute is incorrect #{val1[attr]} != #{val2[attr]}"
тогда консоль нам выдаст красивый, понятный текст вроде:
Failure/Error: [:length, :width, :weight].each{|attr| val1[attr].should eq(val2[attr]), "#{attr} attribute is incorrect #{val1[attr]} != #{val2[attr]}"
width attribute is incorrect 1.5 != 1.2
зы. заодно стало ясно зачем нам == и eq() :)
it "should do something…"
автоматически определяет как pending,
а вот неполные блоки(без объявления тела блока) типа:
describe "user authentication"
context "nothing to do…"
просто полностью игнорятся?
То есть нужно ручками писать:
describe "user authentication" do
pending
end
Я то понимаю, что предложения на выходе некрасивые и незаконченные получаются, но забыть что-то нужное покрыть кодом все-таки поважнее некрасивого предложения будет.