← All posts tagged Rspec

yuroker
Rspec Ruby Не надо путать foo.should be_true и foo.should == true, первое ожидает, что !!foo == true, а вот второе делает проверку на foo == true. То же самое про foo.should be_false, которое эквивалентно: !foo.should == true
yuroker
Rails note Rspec test Очень полезной штукой оказались custom messages for expectations.
Очень часто приходится проверять равенство сразу нескольких полей сразу, как-то так:

[: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() :)
yuroker
Rails Rspec test А вот забавно, почему rspec неполные блоки типа
it "should do something…"
автоматически определяет как pending,
а вот неполные блоки(без объявления тела блока) типа:
describe "user authentication"
context "nothing to do…"
просто полностью игнорятся?
То есть нужно ручками писать:
describe "user authentication" do
pending
end

Я то понимаю, что предложения на выходе некрасивые и незаконченные получаются, но забыть что-то нужное покрыть кодом все-таки поважнее некрасивого предложения будет.