Hej,
przed chwilą napisałem testy i małą funkcjonalnosć w serwisie. Uczę się testować, dlatego zamieszczam poniżej moje dzieło. Proszę o opinie i propozycje.
[code=ruby]#spece:
context “meta_description” do
it "when no description specified should use category name and self name in description" do
@good = Factory.create :good
meta_description = "#{@good.category.name} #{@good.name} #{Good::META_DESCRIPTION}"
@good.meta_description.should == meta_description
end
it "has description specified" do
@good_with_seo = Factory.create :good_with_seo
meta_description = "#{@good_with_seo.seo_data.description} #{Good::META_DESCRIPTION}"
@good_with_seo.meta_description.should == meta_description
end
end
#model:
#Returns text for meta tag descrioption. #If description in seo data is blank, returns standard description
def meta_description
if seo_data.description.blank?
return “#{category.name} #{name} #{META_DESCRIPTION}”
else
return “#{seo_data.description} #{META_DESCRIPTION}”
end
end[/code]
Sławosz
Zamiast Factory.create(:good_with_seo), zrobiłbym:
Factory.create :good, :description => "Super!"
Jedną z zalet factory girl jest to, że nie musisz patrzeć do fixtures, żeby wiedzieć jak wygląda obiekt. Dlatego jeżeli używasz good_with_seo w jednym (czy nawet kilku miejscach), nie opłaca się do tego robić oddzielnej fabryki. Tzn. poświęcamy lekko DRY na rzecz czytelności.
Druga rzecz to create. W tym miejscu nie ma żadnego znaczenia czy obiekt jest zapisany w bazie, dlatego spokojnie można użyć Factory.build i testy będą chodzić szybciej.
it "when no description specified should use category name and self name in description" do
sam powiesz ze “it when no descripition…” zle brzmi
moim zdaniem powinno byc tak:
context "when no description specified" do
it "should user ......"
end
Druga sprawa
Zmiennych instancyjnych nalezy uzwac tylko w filtrach. Jezeli definiujesz jakies zmienne w tescie to nalezy uzyc zmiennych lokalnych