Тест Python Django для одного из двух исключений - PullRequest
0 голосов
/ 09 сентября 2018

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

Модель

class AvailablePermissions(models.Model):
    # Main Checkbox.
    category = models.CharField(
        max_length=100,
    )
    # Checkboxes under Main Checkbox.
    subcategory = models.CharField(
        max_length=100,
    )
    # The view to grant permission to.
    view_name= models.CharField(
        max_length=255,
        unique=True,
    )

    def full_clean_save(self):
        try:
            name = resolve(reverse(f'{self.view_name}'))
            self.full_clean()
            self.save()
        except NoReverseMatch as nrme:
            raise nrme
        except ValidationError as ve:
            raise ve
        return self

Test

# Default permission object "(**permission)"
permission = {
            'category': 'Category',
            'subcategory': 'Subcategory',
            'view_name': 'employee:create_profile',
            }
available_permission = AvailablePermissions(**permission)

class AvailablePermissionsValidationTest(TestCase):

    def test_AvailablePermissions_will_not_save_blank_permissions(self):
        for field in permission:
            original_value = permission[field]
            permission[field] = ''

            with self.assertRaises(ValidationError or NoReverseMatch):
                AvailablePermissions(
                    **permission
                ).full_clean_save()

            permission[field] = original_value

Выдает ошибку NoReverseMatch, но я не могу понять, как искать исключение «или» или «*».

1 Ответ

0 голосов
/ 09 сентября 2018

Это может сработать:

with self.assertRaises(ValidationError):
    try:
        AvailablePermissions(
            **permission
        ).full_clean_save()
    except NoReverseMatch:
        raise ValidationError 

Но вы действительно хотите это сделать? Как правило, при модульном тестировании желательно использовать все возможные пути. Это просто гарантирует, что один из двух путей был протестирован.

...