Я думаю, что 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?

0
ryeguy 29 Мар 2010 в 19:49

3 ответа

Лучший ответ

Он предназначен для людей, которым требуется полное защитное покрытие тестирования, например, если кто-то нарушит любую функцию приложения, тест не удастся.

1
mckeed 29 Мар 2010 в 20:41

Я не использовал shoulda и не знаю точно, о чем думали авторы, но за эти годы я написал много модульных тестов Ruby, так что буду гадать.

Некоторые части программы могут быть объявлены в RoR чисто декларативно, например validate_uniqueness_of. Остальное вы пишете более изощренными методами для реализации. Класс обычно состоит из комбинации того и другого. Обратите внимание, что написание последнего обычно занимает намного больше времени (по времени и пространству), чем первое.

Итак, если кто-то был заинтересован в наброске дизайна для класса, возможно, потому что он был взволнован «TDD», можно было бы написать тест, который объявил бы все, что класс должен поддерживать: заголовок уникален, идентификатор пользователя - простое число Мерсена, что угодно . Это быстро и просто написать. Затем можно было бы написать код для всего этого, зная контракт класса и имея возможность увидеть его в сжатой форме.

Это просто предположение.

1
Ken 29 Мар 2010 в 20:04
А затем, когда какой-нибудь придурок удалил уникальность названия и разорвал контракт, тест завершился неудачно, и вы бы узнали, что он нарушен (или что контракт нарушен, и в этом случае любую функцию, которая его вызывает, может потребоваться изменить).
 – 
Brian
29 Мар 2010 в 20:57

Это макросы, специфичные для RSpec и ActiveRecord.

Да, Shoulda действительно играет с RSpec.

http://robots.oughttbot.com/post/159805987/speculating-with-shoulda

-1
The Who 29 Мар 2010 в 20:10