Как мне протестировать модель с большим количеством атрибутов и проверок в Ruby on Rails? - PullRequest
3 голосов
/ 20 октября 2010

Привет, у меня есть пользовательская модель с большим количеством атрибутов и проверок, которые мне нужны для входа. Я хочу разработать свое приложение, используя разработку через тестирование, но мне трудно писать простые тесты для проверок, таких как отсутствие пустых писем, уникальных писем, правильного адреса электронной почты.

Итак, как лучше всего начать писать тесты?

Ответы [ 2 ]

2 голосов
/ 20 октября 2010

Ifa (http://github.com/thoughtbot/shoulda/wiki/Usage) позволит легко проверять такие проверки ActiveRecord.

  should_not_allow_values_for :email, "blah", "b lah" 
  should_allow_values_for :email, "a@b.com", "asdf@asdf.com" 

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

0 голосов
/ 20 октября 2010

Создайте хэш допустимых атрибутов, которые успешно создадут объект того типа, который вы хотите протестировать. Обычно это делается один раз перед шагом. Затем для каждого атрибута, который вы хотите проверить проверки, создайте тестовый вид вроде этого (используя синтаксис rSpec):

obj_under_test = MyModel.new(@valid_attributes)
object_under_test.email = nil
obj_under_test.should_not be_valid

В этом случае @valid_attributes - это хеш, который вы создаете. Альтернативой этому является использование разумных фабрик для генерации ваших объектов для каждого теста. Посмотрите на FactoryGirl, Machinist, Fixjour для некоторых примеров. Итак, используя ваш пример, что-то вроде этого имеет смысл:

Вы можете довести свои тесты / спецификации до желаемого уровня детализации. Многие люди любят проверять только одну вещь в каждом случае (или «пример», на языке BDD). Таким образом, у вас может быть набор тестов, таких как «должен иметь адрес электронной почты», «должен иметь действительный адрес электронной почты, если он указан», «должен иметь адрес электронной почты в действительном домене» и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...