Я думаю, что shoulda - это действительно здорово, но я не понимаю, почему существуют некоторые из макросов, например:
should_validate_uniqueness_of :title
should_validate_presence_of :body, :message => /wtf/
should_validate_presence_of :title
should_validate_numericality_of :user_id
Я относительно новичок в тестировании, но какой цели они служат? Они почти точно отражают те же проверки, которые происходят в модели. Например, чего именно вы добьетесь, войдя в свою модель и написав validates_uniqueness_of :title
, а затем написав тест, который говорит should_validate_uniqueness_of :title
?
3 ответа
Он предназначен для людей, которым требуется полное защитное покрытие тестирования, например, если кто-то нарушит любую функцию приложения, тест не удастся.
Я не использовал shoulda
и не знаю точно, о чем думали авторы, но за эти годы я написал много модульных тестов Ruby, так что буду гадать.
Некоторые части программы могут быть объявлены в RoR чисто декларативно, например validate_uniqueness_of
. Остальное вы пишете более изощренными методами для реализации. Класс обычно состоит из комбинации того и другого. Обратите внимание, что написание последнего обычно занимает намного больше времени (по времени и пространству), чем первое.
Итак, если кто-то был заинтересован в наброске дизайна для класса, возможно, потому что он был взволнован «TDD», можно было бы написать тест, который объявил бы все, что класс должен поддерживать: заголовок уникален, идентификатор пользователя - простое число Мерсена, что угодно . Это быстро и просто написать. Затем можно было бы написать код для всего этого, зная контракт класса и имея возможность увидеть его в сжатой форме.
Это просто предположение.
Это макросы, специфичные для RSpec и ActiveRecord.
Да, Shoulda действительно играет с RSpec.
http://robots.oughttbot.com/post/159805987/speculating-with-shoulda
Похожие вопросы
Новые вопросы
ruby
Ruby - это многоплатформенный динамический объектно-ориентированный интерпретируемый язык с открытым исходным кодом. Тег [ruby] предназначен для вопросов, связанных с языком Ruby, включая его синтаксис и его библиотеки. Вопросы Ruby on Rails должны быть помечены [ruby-on-rails].