неинициализирана константа Test::Unit::TestResult::TestResultFailureSupport

Получавам грешката в subj, когато се опитвам да стартирам спецификации или генератори в нов проект за релси.

Това се случва, когато добавя shoulda към сместа.

Добавих следното в config/environment.rb:

config.gem 'rspec', :version => '1.2.6', :lib => false
config.gem 'rspec-rails', :version => '1.2.6', :lib => false
config.gem "thoughtbot-shoulda", :version => "2.10.2", :lib => 'shoulda', :source => "http://gems.github.com"

Аз съм на OSX.

  • ruby 1.8.6 (2008-08-11 patchlevel 287)
  • скъпоценни камъни 1.3.5
  • релси 2.3.4
  • rspec - 1.2.6
  • трябва - 2.10.2
  • тестова единица - 2.0.3

Наясно съм с това и добавянето на config.gem 'test-unit', :lib => 'test/unit' наистина решава проблема с генератора, тъй като не хвърля изключение, но отпечатва 0 tests, 0 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications в края на изпълнението, така че предполагам, че се опитва да стартира тестове, което е неочаквано и нежелано, също така спецификациите спират да се изпълняват изобщо, изглежда, че rspec е изобщо не работи, когато стартирам rake spec получавам отново изхода на тестовата единица (с 0 теста, тъй като има само спецификации, без дефинирани тестове)


person Vitaly Kushner    schedule 05.10.2009    source източник
comment
премахването на тестова единица gem помогна, но не мога да нарека това решение :(   -  person Vitaly Kushner    schedule 05.10.2009


Отговори (3)


Наскоро се сблъсках с подобен проблем и го проследих до този комит в rubygems:

http://github.com/vvs/rubygems/commit/cbb4b07d491dd49b8dff8ab7af706dde31307c7d

Което зарежда скъпоценния камък „test-unit“, ако е там, или безшумно продължава, ако не е. Авторът на тази промяна може би не е наясно с една фундаментална истина - че активирането на скъпоценен камък често може да промени поведението на други скъпоценни камъни, заредени в системата. Разработчиците на приложения трябва да отговарят за дефинирането на набора от скъпоценни камъни, които искат да бъдат активирани; това, че системата rubygems сама решава да зареди по желание скъпоценен камък, е главозамайващо.

Другата половина от този проблем е въпросът защо скъпоценният камък на тестовата единица пречи на rspec. Не мога да отговоря на това, но го проследих до факта, че не се регистрират ExampleGroups, което от своя страна се дължи на факта, че „наследеното“ обратно извикване в ExampleGroupMethods не се извиква, когато Rspec динамично създава нов подклас на ActiveSupport: :TestCase (това се случва в ExampleGroupMethods#subclass)

person user341555    schedule 14.05.2010
comment
Така че, като се замисля, не е ясно дали говоря за същия проблем или за различен. Проблемът, за който говоря, се случва само когато използвам geminstaller, който изисква част от rubygems ('rubygems/validator'), която след това се опитва да изиска test-unit, но мълчаливо продължава, ако gem не е наличен. Не звучи така, сякаш използвате geminstaller, така че не ми е ясно, че rubygems е този, който дърпа тестова единица. - person user341555; 15.05.2010
comment
също не съм сигурен и вече не се сблъсквам с този проблем, но така или иначе ще ви дам точки за усилията :) Нямах търпението да проследя всичко. - person Vitaly Kushner; 15.05.2010
comment
Мисля, че е свързано... когато деинсталирам test-unit, този проблем изчезва. Не използвам geminstaller. Проблемът е, че искам да стартирам ci сървър, където някои проекти използват test-unit, а други използват rspec, така че това е особено разочароващо :( - person Tom Lianza; 09.11.2010

Въз основа на разговор, който намерих тук , изглежда проблемът не е, че RSpec умира с всички версии на тестовата единица, а само че е несъвместим с по-новите. Така че пълното деинсталиране на тестовата единица е едно решение. Но ако това не е опция за вас (както не е и за мен), можете да инсталирате по-стара версия (напр. 1.2.3) и просто да се уверите, че е заредена преди rspec.

Например имам това в моя файл environment/test.rb и тестовете се изпълняват отново:

config.gem 'test-unit'  , :lib => 'test/unit',  :version => '<2.0'
config.gem "rspec",       :lib => false, :version => '<2.0'
config.gem "rspec-rails", :lib => false, :version => '<2.0'
person Tom Lianza    schedule 28.11.2010

test-unit всъщност е вграден в Ruby, така че премахването на скъпоценния камък се връща към вградената версия на Ruby. Освен ако няма нещо специално, от което се нуждаете, което не е включено в тестовата единица по подразбиране, тогава не бих се тревожил за това твърде много.

person Peter Wagenet    schedule 05.10.2009
comment
да, но ако просто инсталирането на тестова единица (това беше зависимост за нещо) прецаква нещата, значи някъде има проблем. засега току-що премахнах скъпоценния камък на тестовата единица, но може да се наложи да го върна отново. - person Vitaly Kushner; 07.10.2009
comment
Достатъчно вярно. Виждал съм същия проблем преди, така че се надявам, че някой друг може да хвърли малко светлина върху него. - person Peter Wagenet; 08.10.2009