Должен ли один модуль испытывать стойкость в рельсах? - PullRequest
0 голосов
/ 28 февраля 2012

Мы выполняем проект rails 3.2.1 с RSpec 2. Мой вопрос, должен ли я проверять базовую стойкость каждой из моих моделей activerecord? Я делал это в мои дни на C # / NHibernate, чтобы обеспечить наличие правильных таблиц / отображений.

Так что, если у меня есть клиент с полями имени, адреса и телефона, я мог бы написать rspec следующим образом:

describe Customer do
    it "saves & retrieves its fields to and from the db"

    c = Customer.new
    c.name = "Bob Smith"
    c.address = "123 some street"
    c.phone = "555-555-5555"
    or = Order.new
    c.orders << or

    c.save

    found = Customer.find(c.id)
    found.should_not be(c)
    found.name.should == c.name
    found.address.should == c.address
    found.phone.should == c.phone
    found.orders.count.should == 1
    found.orders[0].id.should == or.id

    end
end

Это "лучшая практика" или распространена в мире ruby ​​/ rails / rspec? Я также должен отметить, что смысл не в том, чтобы проверить, что rails делает изначально, а в том, чтобы проверить, что в БД и моделях установлены правильные поля и отношения.

Ответы [ 2 ]

3 голосов
/ 28 февраля 2012

Нет. Вы не должны быть юнитом , проверяющим постоянство. Модульный тест подтверждает, что устройство работает изолированно, и вам следует проверять только ваш код. Функциональность персистентности является частью Rails, и, поскольку это не ваш код, вам не следует писать для нее модульные тесты.

Вы могли бы быть заинтересованы в тестировании отображений , но не в модульном тестировании. Для этого вы бы написали интеграционный тест. Интеграционный тест будет проверять ваш модуль, интегрируясь с другой частью системы, возможно, вплоть до базы данных. Запуск этих тестов подтвердит, что ваш модуль работает с базой данных, то есть отображения хороши.

Короче говоря - вы не проверяете персистентность в тестах unit ; вы тестируете их в интеграционных тестах.

3 голосов
/ 28 февраля 2012

Нет, я не верю, что рекомендуется проводить такого рода низкоуровневое тестирование, поскольку большинство этих тестов будут встроены в тестирование для Rails и ORM, которые вы используете.

Однако, если вы переопределяете какие-либо методы или выполняете сложную логику ассоциации в своих моделях, было бы лучше иметь собственные тесты.

...