Я делаю некоторые конечные точки API, используя колбу.Я хотел бы знать, как настроить tearDown для тестов, чтобы два из тестов, а именно GET для конкретного отчета и DELETE для конкретного отчета, не конфликтовали.Вот мой код:
models.py
reports = [
{
"id": 1,
"createdOn": "25-11-2018 09:57",
"createdBy": 1,
"type": "Red Flag Report",
"location": "1,1",
"status": "Resolved",
"comment": "Act quickly"
},
{
"id": 2,
"createdOn": "26-11-2018 09:57",
"createdBy": 2,
"type": "Red Flag Report",
"location": "2,2",
"status": "Under investigation",
"comment": "Don't let them get away with it"
}
]
class ReportsModel():
def __init__(self):
self.db = reports
def get_specific(self, report_id):
return next(filter(lambda x: x["id"] == int(report_id), self.db), None)
def delete(self, report_index):
self.db.pop(report_index)
views.py
from flask import Flask, request
from flask_restful import Resource
from .models import ReportsModel
class Report(Resource):
def __init__(self):
self.reports = ReportsModel()
def get(self, id):
report = self.reports.get_specific(id)
if report:
return {"status": 200, "data": [report]}
else:
return {"status": 404, "error": "Report record not found"}, 404
def delete(self, id):
report= self.reports.get_specific(id)
if report:
self.reports.delete(self.reports.db.index(report))
return {"status": 200,"data": [{"id": int(id), "message": "Report record has been deleted"}]}
else:
return {"status": 404, "error": "Report record not found"}, 404
test_reports.py
from unittest import TestCase
from flask import json
from flask_restful import request
from app import create_app
from app.api.v1.models import ReportsModel
app = create_app()
class TestReports(TestCase):
def setUp(self):
self.reports = ReportsModel()
self.app = app.test_client()
self.app.testing = True
def test_get_specific_report(self):
response = self.app.get('/api/v1/reports/1')
data = json.loads(response.data)
self.assertEqual(response.status_code, 200)
self.assertEqual(data, {"status": 200, "data": [self.reports.get_specific(1)]})
def test_delete_a_specific_report(self):
response = self.app.delete('/api/v1/reports/1')
data = json.loads(response.data)
self.assertEqual(response.status_code, 200)
self.assertEqual(data, {"status": 200, "data": [{"id": 1, "message": "Report record has been deleted"}]})
Когда я запускаюКод на почтальоне работает отлично.Однако, когда я запускаю тесты, первый тест терпит неудачу, говоря, что ожидаемый код состояния - 404, и сообщение, что отчет не найден.Это тот же результат, если я поставлю идентификатор 2 в обоих тестах.Однако, если я использую 1 в одном тесте и 2 в другом, тест проходит успешно.
Есть ли что-то, что я могу сделать, чтобы предотвратить провал тестов?
Редактировать: я должен упомянутьчто моя идея состоит в том, чтобы добавить tearDown (), чтобы я мог сбросить все для каждого теста.К сожалению, моя идея до сих пор была:
def tearDown(self):
self.reports = 0 #or some other value
Но я не нашел подходящего способа сделать это.
del self.reports
тоже не сработало.