Как проводить модульное тестирование моделей с пространством имен

В моем приложении Rails я активно использую подкаталоги каталога модели и, следовательно, модели с пространством имен, то есть у меня есть следующая иерархия каталогов:

models
|
+- base_game
|  |
|  +- foo.rb (defines class BaseGame::Foo)
|
+- expansion
   |
   +- bar.rb (defines class Expansion::Bar) 

Это обеспечивается Rails, то есть просто не работает вызов классов "просто" Foo и Bar.

Я хочу провести модульное тестирование этих классов (используя Shoulda поверх ActiveSupport::TestCase). Я знаю, что имя тестируемого класса будет получено из имени класса тестового примера.

Как написать модульные тесты, которые будут проверять эти классы?


person Chowlett    schedule 29.07.2011    source источник


Ответы (3)


Оказывается, это просто, даже при нормальных ActiveSupport / Test::Unit. Просто продублируйте структуру каталогов модели под /test:

test
|
+- base_game
|  |
|  +- foo_test.rb (defines class BaseGame::FooTest)
|
+- expansion
   |
   +- bar_test.rb (defines class Expansion::BarTest) 
person Chowlett    schedule 31.07.2011

Это должно работать напрямую, я использую Rspec, и это прямо:

describe User::Profile do

  it "should exist" do
    User::Profile.class.should be_a Class
  end

  it { should validate_presence_of(:name) }

end
person apneadiving    schedule 29.07.2011

Вот код, который работал у меня как с ruby -I, так и с zeus:

require "test_helper"

class BaseGame::Foo < ActiveSupport::TestCase
  include BaseGame

  should "let #baz do something" do
    assert Foo.new.baz
  end

end

Вы также можете сделать

require "test_helper"

class BaseGame::Foo < ActiveSupport::TestCase

  should "let #baz do something" do
    assert BaseGame::Foo.new.baz
  end

end
person sakovias    schedule 27.11.2014