Я думал, что начну свою карьеру с написанием тестов с валидаторами.Первым валидатором, который я решил проверить, был 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 нет никаких тестов, и я потерялся.