我正在使用 Flask Restx 构建 API。我编写了一个通用异常处理程序,它将抛出 Json 格式的错误消息和代码。
@app.errorhandler(APIError)
def handle_invalid_usage(error):
logger.opt(exception=True).error(error)
response = jsonify(error.to_dict())
response.status_code = error.status_code
return response
我正在尝试使用 pytest 编写单元测试来测试错误条件(找不到资源)。我的单元测试确实只返回 500 内部服务器错误(response.status_code),而不是通过错误处理程序并返回 404。当我直接使用 Postman 测试它时,它工作得很好。
@pytest.fixture(scope="session")
def app():
app = create_app()
return app
@pytest.fixture
def client(app):
return app.test_client()
def test_get_sequence_resource_not_found(mocker: MockerFixture, client: FlaskClient):
mocked = mocker.patch("service.ViewSequenceService.get_sequence")
mocked.side_effect = ResourceNotFound('Sequence id Not Present')
response = client.get("/sequence/f15a9f6e-7a1d-4d12-99c3-fb80d4bc98a1")
json_data = json.loads(response.data)
assert response.status_code == 404
assert json_data['payload']['message'] == 'Sequence id Not Present'
assert json_data['payload']['status'] == 404