Должно ли суперклассовое несоответствие на юнит-тестах - PullRequest
4 голосов
/ 27 июня 2011

Попытка написать простой модульный тест с использованием musta и rails 3.

test / unit / user_test.rb

class UserTest < Test::Unit::TestCase
  should validate_presence_of(:password, :on => :create)
  should validate_presence_of(:handle, :email)
  should validate_confirmation_of(:password)
  should validate_length_of(:handle, :within => 6..15)
  should validate_uniqueness_of(:handle)
  should validate_format_of(:handle, :with => /\A\w+\z/i)
  should validate_length_of(:email, :within => 6..100)
end

Соответствующие части Gemfile

group :test do
  gem 'shoulda'
  gem 'rspec-rails', '2.0.0.beta.12'
end

Когда я пытаюсь запустить это с помощью rake test --trace, я получаю следующую ошибку:

** Execute test:units
/Users/removed/removed/removed/app_name/test/unit/user_test.rb:5: superclass mismatch for class UserTest (TypeError)
    from /Library/Ruby/Gems/1.8/gems/activesupport-3.0.7/lib/active_support/dependencies.rb:239:in `require'
    from /Library/Ruby/Gems/1.8/gems/activesupport-3.0.7/lib/active_support/dependencies.rb:239:in `require'
    from /Library/Ruby/Gems/1.8/gems/activesupport-3.0.7/lib/active_support/dependencies.rb:227:in `load_dependency'
    from /Library/Ruby/Gems/1.8/gems/activesupport-3.0.7/lib/active_support/dependencies.rb:239:in `require'
    from /Library/Ruby/Gems/1.8/gems/rake-0.9.2/lib/rake/rake_test_loader.rb:9
    from /Library/Ruby/Gems/1.8/gems/rake-0.9.2/lib/rake/rake_test_loader.rb:9:in `each'
    from /Library/Ruby/Gems/1.8/gems/rake-0.9.2/lib/rake/rake_test_loader.rb:9
    from /Library/Ruby/Gems/1.8/gems/rake-0.9.2/lib/rake/rake_test_loader.rb:5:in `each'
    from /Library/Ruby/Gems/1.8/gems/rake-0.9.2/lib/rake/rake_test_loader.rb:5

Я понимаю ошибку, я просто не понимаю, гдедругой класс UserTest будет определен, что дает мне эту проблему.Есть мысли?

Майк

Ответы [ 2 ]

5 голосов
/ 28 июня 2011

Проверьте вывод find . | xargs grep -l UserTest на случайное дублирование использования имени класса.

0 голосов
/ 28 июня 2011

Единственный способ избежать этой ошибки - это сделать следующее:

UserTest = Class.new(Test::Unit::TestCase)
class UserTest # Or class UserTest < Test::Unit::TestCase is also allowed
  should validate_presence_of(:password, :on => :create)
  should validate_presence_of(:handle, :email)
  should validate_confirmation_of(:password)
  should validate_length_of(:handle, :within => 6..15)
  should validate_uniqueness_of(:handle)
  should validate_format_of(:handle, :with => /\A\w+\z/i)
  should validate_length_of(:email, :within => 6..100)
end

если бы вы повторили

UserTest = Class.new(Test::Unit::TestCase) # repeated

вы получите

warning: already initialized constant UserTest

Но такой подход выглядел бы немного странно.

...