Последнее время появилось много обсуждений по поводу rspec, того что он вгрызается в core языка и фреймворка. На самом деле я сам сталкивался с проблемами, когда для того чтобы просто заставить работать rspec требовалось много часов тупого плутания по коду.

В ror2ru многие советуют shoulda, наконец решил его попробовать.

Почитав документации тут и тут написал несколько тестов:

Тестируемый код:

module KeywordsHelper
MIN_LENGHT = 3

def get_keywords(full_text)
words = FrequencyHash.new
full_text.split(/\W/).each do |word|
words.occur(word) if word.length >= MIN_LENGHT
end
words.frequent_keys(2)
end

end


Cам тест:


require 'test_helper'

class KeywordsTest < Test::Unit::TestCase
include KeywordsHelper

context "get_keywords" do
setup do
end

should "return keywords that occur more than 2 times" do
assert_equal ['lazy'], get_keywords("quick lazy frog jumps over the lazy dog")
assert_equal ['frog', 'lazy'], get_keywords("quick lazy frog jumps over the lazy frog")
end

should "not return keywords with lenght smaller than 3 symbols" do
assert_equal [], get_keywords("do do do do")
end

should "return keywords sorted by frequency" do
assert_equal ["dog", "fox"], get_keywords("fox fox dog dog fox dog dog")
end

should "return keywords sorted alphabetically" do
assert_equal ["dog", "fox"], get_keywords("fox fox dog dog fox dog")
end

end

end


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

Все это дело безболезненно заработало вместе с rails 2.3.2

Теперь планирую поюзать shoulda для тестирования контроллеров и проинтегрять с mocha. Если все пройдет гладко, то можно пробовать вводить его для некоторых проектов.