Rspec - prośba o ocenę

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

Jest spoko, ja bym tylko 2 rzeczy zmienił.

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.

Do seo jest klasa SeoData i

Factory.create :good, :description => "Super!"

niestety nie jest możliwe.

[quote=slawosz]Do seo jest klasa SeoData i

Factory.create :good, :description => "Super!"

niestety nie jest możliwe.[/quote]
A, rzeczywiście uprościłem.

Sławosz dwie rzeczy:

    it "when no description specified should use category name and self name in description" do

sam powiesz ze “it when no descripition…” zle brzmi :stuck_out_tongue:
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

Dzięki :slight_smile: