Тестване на контролер,в който се използва клас,който не наследява ActiveRecord::Base с rspec ?

32 views
Skip to first unread message

Tsvetelina Borisova

unread,
Apr 2, 2012, 1:48:41 AM4/2/12
to ruby-on-rai...@googlegroups.com
Здравейте,

      Може ли някой да ми помогне със следната ситуация: имам един контролер,който използва метод от даден клас,който не наследява ActiveRecord::Base и искам да тествам дали метода convert на класа Convertor се вика в контролера. Как мога да го направя? И изобщо в случаи,когато контролера не ползва класове,които наследяват ActiveRecord::Base има ли нещо като правилен начин,по който да се тества работата на контролера с класа?

Krasimir Angelov

unread,
Apr 2, 2012, 1:56:10 AM4/2/12
to ruby-on-rai...@googlegroups.com
Че какво значение има дали класа е наследник на АР или не?

 Convertor.should_receive(:convert).with(foo).and_return(bar)

K. 

2012/4/2 Tsvetelina Borisova <ts.bor...@gmail.com>
Здравейте,

      Може ли някой да ми помогне със следната ситуация: имам един контролер,който използва метод от даден клас,който не наследява ActiveRecord::Base и искам да тествам дали метода convert на класа Convertor се вика в контролера. Как мога да го направя? И изобщо в случаи,когато контролера не ползва класове,които наследяват ActiveRecord::Base има ли нещо като правилен начин,по който да се тества работата на контролера с класа?

--
Това писмо идва от пощенския списък „Ruby on Rails: България“.
За да се отпишете: ruby-on-rails-bul...@googlegroups.com
Останалите екстри: http://groups.google.com/group/ruby-on-rails-bulgaria?hl=bg

Tsvetelina Borisova

unread,
Apr 2, 2012, 2:03:40 AM4/2/12
to ruby-on-rai...@googlegroups.com
Това го бях пробвала и теста ми пропадаше с missing template и бях решила,че няма да стане. Обаче сега се сетих да сложа едно render :text. Мерси за отговора :)

Kiril Mitov

unread,
Apr 2, 2012, 2:22:13 AM4/2/12
to ruby-on-rai...@googlegroups.com
А дали има начин да направя (дали е добра практика):

object.should_receive(:convert).and_return(result) 

и да подам object от rspec-а към контролера. 

На няколко места порчетох, че не е добре да подаваш параметри на конструктора на контролер. Как да "инжектирам" даден обект, или възможността ми е с отделен метод?


2012/4/2 Krasimir Angelov <krasimir...@gmail.com>



--
+359 878 93 30 94
Училище по роботика "Robopartans"
www.robopartans.com
robopartans-facebook

"Education is a self organizing system, where learning is an emerging phenomenon...."

Krasimir Angelov

unread,
Apr 2, 2012, 2:50:42 AM4/2/12
to ruby-on-rai...@googlegroups.com
Това с missing_template и render :text e странно. Да не би да са ти с integrated views контролер спековете?

K.

2012/4/2 Tsvetelina Borisova <ts.bor...@gmail.com>
Това го бях пробвала и теста ми пропадаше с missing template и бях решила,че няма да стане. Обаче сега се сетих да сложа едно render :text. Мерси за отговора :)
--

Krasimir Angelov

unread,
Apr 2, 2012, 2:57:40 AM4/2/12
to ruby-on-rai...@googlegroups.com
Аз го правя ето така - https://gist.github.com/3a0b9e8890a4afb1bf74

К.

2012/4/2 Kiril Mitov <k.m...@robopartans.com>
Message has been deleted

Tsvetelina Borisova

unread,
Apr 2, 2012, 3:14:09 AM4/2/12
to ruby-on-rai...@googlegroups.com
Не са с integrated views
K.

2012/4/2 Tsvetelina Borisova <ts.bor...@gmail.com>

Kiril Mitov

unread,
Apr 2, 2012, 3:18:59 AM4/2/12
to ruby-on-rai...@googlegroups.com
И аз дотам стигнах.

Но в един момент ми се искаше да избегна FetchingClass.new, което връзка контролера с FetchingClass

Благодаря за насоката.

2012/4/2 Krasimir Angelov <krasimir...@gmail.com>

Stefan Kanev

unread,
Apr 2, 2012, 3:40:01 PM4/2/12
to ruby-on-rai...@googlegroups.com
Проблема е, че нямаш някакво view за този екшън.

Просто постави някакво view и готово. Може да е празно. Когато завършиш фийчъра, в него ще има код.

Ако пък в готовия код controller-а не рендира нищо, то определено ти трябва render или redirect_to. Можеш ли да дадеш малко повече контекст, за да знаем какво точно да ти препоръчаме?

Колкото до другия ти въпрос, няма разлика дали текстваш ActiveRecord обект или не. Докато е някакъв обект от домейна, е напълно ОК да се ползва от контролера.

Имам един Rails проект за един курс във ФМИ, който е относително добре написан и може би си струва да погледнеш като пример. Cucumber тестовете са малко объркани, но controller spec-овете би трябвало да са изрядни. Адресът е http://github.com/skanev/evans. Ако нещо там ти е интересно - питай. Ще се радвам да ти отговоря.

@Кирил

Практиката е да не инжектираш неща в контролера, ами да зависиш от константа, която е класа. Точно в този случай аз бих написал Convertor.should_receive(:convert). От индирекцията би имало смисъл ако я ползваш (имаш нужда от различно поведение в различен environment), но дори тогава бих я сложил в модела, а не в контролера. Аз поне не съм виждал някой да подхожда така.

Tsvetelina Borisova

unread,
Apr 3, 2012, 6:54:29 AM4/3/12
to ruby-on-rai...@googlegroups.com
Благодаря за линка :)
Благодаря за насоката.


2012/4/2 Krasimir Angelov <krasimir...@gmail.com>
К.


2012/4/2 Kiril Mitov <k.m...@robopartans.com>


2012/4/2 Krasimir Angelov <krasimir...@gmail.com>
K. 


2012/4/2 Tsvetelina Borisova <ts.bor...@gmail.com>

--
Това писмо идва от пощенския списък „Ruby on Rails: България“.


--
Това писмо идва от пощенския списък „Ruby on Rails: България“.

--
Това писмо идва от пощенския списък „Ruby on Rails: България“.

--
Това писмо идва от пощенския списък „Ruby on Rails: България“.

Kiril Mitov

unread,
Apr 9, 2012, 7:12:01 AM4/9/12
to ruby-on-rai...@googlegroups.com
Благодаря.

Ще използваме тогава константа в контролера.

2012/4/2 Stefan Kanev <stefan...@gmail.com>
Reply all
Reply to author
Forward
0 new messages