Django издеваться вообще не по телефону - PullRequest
0 голосов
/ 19 марта 2020

У меня есть тест, определенный как показано ниже

    @patch('user.serializers.validate_sns_token', return_value=True)
    def test_can_create_user(self, validate):
        """
        Test that user can be created without logging in
        :return:
        """
        user_payload = self.generate_user_payload()

        resp = self.client.post(
            CREATE_USER_URL,
            user_payload,
        )

        self.assertTrue(validate.called)

        self.assertEqual(
            resp.status_code,
            status.HTTP_200_OK,
        )

Внутри файла user.serializers.py У меня есть функция ниже, которую я хотел бы смоделировать

def validate_sns_token(**kwargs):
    try:
        ...
        return True
    except ValueError as e:
        ...
        return False

Это внешний вызов в Google API, поэтому я хотел бы всегда возвращать True из него.

Внутри сериализатора я вызываю функцию создания, как показано ниже

    def create(self, validated_data):
        ...

        is_token_valid = validate_sns_token(
            sns_id=sns_id,
            sns_type=sns_type,
            token=token,
        )

        if is_token_valid is False:
            raise serializers.ValidationError('토큰이 유효하지 않습니다. 다시 로그인해주세요.', code='AUTH')

        ...

        return user

К сожалению, validate.called всегда False и исходный validate_sns_token все еще вызывается. Как мне написать тест, чтобы исходный validate_sns_token не вызывался вообще, а его возвращаемое значение установлено в True?

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