Я пишу тесты для своего flask api и использую Python (3.7). У меня есть функция представления, позволяющая получить один объект, передав его идентификатор в маршруте, теперь я хочу написать модульный тест для этого представления.
Вот что я сделал до сих пор:
From view function:
@api.route("/book/<int:id>", methods=["GET", "PUT", "DELETE"])
def single_book(id):
conn = db_connection()
cursor = conn.cursor()
book = {}
if request.method == "GET":
try:
cursor.execute("SELECT * FROM BOOK WHERE id=?", (id,))
rows = cursor.fetchall()
for r in rows:
book = r
book = {
"id": book[0],
"author": book[1],
"title": book[2],
"shortDescription": book[3],
"thumbnailUrl": book[4],
"status": book[5],
"pageCount": book[6],
}
conn.close()
except Error as e:
return 'SQL Error'
print(book)
if book is not None:
return jsonify(book), 200
else:
return "Something wrong", 404
From testing file:
@pytest.fixture
def client():
app.config['TESTING'] = True
db_fd, app.config['DATABASE'] = tempfile.mkstemp()
with app.test_client() as client:
with app.app_context():
create_table()
yield client
os.close(db_fd)
os.unlink(app.config['DATABASE'])
# return app.test_client()
def api_single_book(client, book_id):
return client.get('/api/book/{}'.format(book_id), follow_redirects=True)
@pytest.mark.parametrize('id', [1])
def test_single_book(client, id):
resp = api_single_book(client, id)
assert resp.status_code == 200
Теперь, если я запускаю команду pytest
, все остальные тесты пройдены, только этот не прошел со следующей ошибкой:
E KeyError: 0
и указывает на эту строку:
> "id": книга [0],