Как написать тестовый пример для проверки ответа 500 для flask apis - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь написать модульные тесты для flask API. Я не могу понять, как написать тестовые примеры для 500 внутренних ошибок сервера и настраиваемых исключений в ответе API.

Вот мои книги api для получения книги по идентификатору

@BOOKS_BP.route('/<book_id>', methods=['GET'])
def get_book(book_id):
    try:
        book = Book.query.filter(Book.id == book_id).scalar()
        if not book:
            raise DBRecordNotFound('No Record Found with ID - {}'.format(book_id))
        book_schema = BookSchema()
        return jsonify({'status': 'success', 'book': book_schema.dump(book)}), HTTPStatus.OK
    except DBRecordNotFound as ex:
        return jsonify({'status': 'error', 'message': str(ex)}), HTTPStatus.NOT_FOUND
    except Exception as ex:
        logger.error(ex, exc_info=True)
        return jsonify({'status': 'error', 'message': str(ex)}), HTTPStatus.INTERNAL_SERVER_ERROR   

Вот мой тестовый пример получения книги по идентификатору.

import json

from tests.test_base import BaseTestCase
from tests.factories import BookFactory
from http import HTTPStatus


class BooksTestCase(BaseTestCase):

    @classmethod
    def setUpClass(cls):
        super(BooksTestCase, cls).setUpClass()

        book = BookFactory(name='Test Book')
        book.save()
        cls.test_book_id = book.id

    def test_book_by_id(self):
        # For 200 Status
        response = self.client.get('/api/books/{}'.format(self.test_book_id))
        data = json.loads(response.data)
        assert response.status_code == HTTPStatus.OK
        assert data['book']['name'] == 'Test Book'

        # For 404 Status
        response = self.client.get('/api/books/123456')
        data = json.loads(response.data)
        assert response.status_code == HTTPStatus.NOT_FOUND
        assert data['message'] == 'No Record Found with ID - 123456'

        # For 500 Status

...