Поле записей ATExtensions - валидаторы и тесты валидаторов - PullRequest
1 голос
/ 08 января 2012

Я думал, что начну свою карьеру с написанием тестов с валидаторами.Первым валидатором, который я решил проверить, был ATExtensions RecordField, определенный следующим образом:

class CoordinateField(RecordField):
    """ Stores angle in deg, min, sec, bearing """
    security = ClassSecurityInfo()
    _properties = RecordField._properties.copy()
    _properties.update({
        'subfield_validators' : {'degrees':'coordinatevalidator',
                                 'minutes':'coordinatevalidator',
                                 'seconds':'coordinatevalidator',
                                 'bearing':'coordinatevalidator'},
    'type' : 'angle',
    'subfields' : ('degrees', 'minutes', 'seconds', 'bearing'),

(кстати, побочный вопрос о причине использования subfield_validators вместо валидатора одного поля. Единственный вид Record (s) Проверка поля, которая фактически запускается, является subfield_validator. Если у кого-нибудь есть пример того, как написать единственный валидатор для самого RecordField, пожалуйста, поделитесь секретом? Не реальная проблема, но тоже не очень)

Затем фактический тест ...

Я знаю, как проверить валидатор для AT StringField:

self.assertEqual(instance.schema.get('Keyword').validate(
       'XX X', instance), 
       "Validation failed: 'XX X': is an invalid keyword."
)

Этого должно было быть достаточно для тестирования RecordField:

self.assertEqual(instance.schema.get('Latitude').validate(
    {'degrees':'x', 'minutes':'x', 'seconds':'x', 'bearing':'x'}, instance), 
    "Validation failed: invalid co-ordinates."
)

Но я получаю AttributeError: у объекта 'dict' нет атрибута 'form'

Очевидно, что валидатор ожидает запрос.Поэтому я какое-то время блуждал в отладчике, следя за каждой сигнатурой функции validate / validate_validators, которую я мог найти (я не думаю, что было бы продуктивно показывать мою работу), с одним из двух результатов.

a) Синтаксическая ошибка, или b) Валидатору не удалось сообщить о неудачной проверке (просто возвращает None).

Кто-нибудь получил пример тестового поля для поля записей (записей) ATExtensions, которое я могу написать?В Products.ATExtensions нет никаких тестов, и я потерялся.

...