Я пытаюсь написать несколько тестов для конечных точек fastapi. Однако я понял, что использую не макеты баз данных, которые, как мне казалось, я создал... а настоящие. Что происходит? Чего мне не хватает?
Вот что я пробовал для своего файла test_main.py:
from pydantic import BaseModel
from typing import Annotated, Optional, List
from fastapi import FastAPI, Depends, status, HTTPException, Body, Path, Query
from sqlalchemy.orm import Session
from FruitCaloriesApp import models
from FruitCaloriesApp.models import FruitCalories
from FruitCaloriesApp.database import engine, SessionLocal
import sqlite3
from datetime import datetime
app = FastAPI()
models.Base.metadata.create_all(bind=engine)
def get_db():
db=SessionLocal()
try:
yield db
finally:
db.close()
db_dependency = Annotated[Session, Depends(get_db)]
class CaloriesInput(BaseModel):
fruit: str
calories: float
class CaloriesHistoryResponse(BaseModel):
user_id: int
date: str
fruit: str
amount: float
total_calories: float
#OOP structure
class CaloriesCalculator():
def __init__(self, amount: float, fruit: str, db: Session):
self.amount = amount
self.fruit = fruit
self.db = db
self.calories = self.get_calories()
def get_calories(self):
result = (self.db.query(FruitCalories.calories).filter(FruitCalories.fruit == self.fruit).first())
if result:
return result[0]
else:
return None
def calc_calories(self):
if self.calories is None:
raise ValueError("valerror")
else:
return self.amount * self.calories
def store_calories(self, db: Session, user_id: str, date, total_calories: float):
calories_entry = CaloriesHistory(user_id=user_id, date=date, amount=self.amount,fruit=self.fruit,total_calories=total_calories)
db.add(calories_entry)
db.commit()
db.refresh(calories_entry)
return calories_entry
@app.post("/store_calories", status_code = status.HTTP_201_CREATED)
def store_calories_fruit(data: CaloriesInput, user_id: int, db: Session = Depends(get_db)):
try:
calculator = CaloriesCalculator(fruit=data.fruit, disamount=data.amount, db=db)
total_calories = calculator.calc_calories()
date=datetime.now().isoformat()
calculator.store_calories(db, user_id, date, total_calories)
return {
"message": "Stored",
"data": {"user_id": user_id, "date": date, "fruit": data.fruit, "amount": data.amount,"total_calories": total_calories}
}
А затем, когда я запускаю pytest, я вижу, что данные добавляются в мою производственную базу данных, в которой есть таблица под названием «калорииистория». Почему?
Я пытаюсь написать несколько тестов для конечных точек fastapi. Однако я понял, что использую не макеты баз данных, которые, как мне казалось, я создал... а настоящие. Что происходит? Чего мне не хватает? Вот что я пробовал для своего файла test_main.py: [code]import pytest from FruitCaloriesApp.main import CaloriesCalculator, get_db, app from FruitCaloriesApp.database import SessionLocal from FruitCaloriesApp.models import FruitCalories, CaloriesHistory,Base from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker
@pytest.fixture(scope="function") def db_session(): # Create fruitcalories table in the in-memory database Base.metadata.create_all(bind=engine) db = SessionLocal()
# Insert mock data to fruitcalories table apple = FruitCalories(fruit="apple", calories=20.3) pear= FruitCalories(fruit="pear", calories=10.3)
db.add_all([apple, pear]) db.commit() yield db db.close() Base.metadata.drop_all(bind=engine)
#2. Test End Points ------- from fastapi.testclient import TestClient #create a client for our app, like app=Fastapi() from CaloriesCalc import main from fastapi import status from FruitCalcApp.main import app, CaloriesInput from datetime import datetime
return { "message": "Stored", "data": {"user_id": user_id, "date": date, "fruit": data.fruit, "amount": data.amount,"total_calories": total_calories} } [/code] А затем, когда я запускаю pytest, я вижу, что данные добавляются в мою производственную базу данных, в которой есть таблица под названием «калорииистория». Почему?
Я создал базу данных под названием «аптека» в pgAdmin4, используя настройки по умолчанию (localhost, порт 5432, пользователь postgres). Однако при попытке подключиться к нему через терминал с помощью psql я получаю сообщение об ошибке, сообщающее,...
Я сейчас рассказываю о своем приложении Laravel и сталкиваюсь с следующей проблемой: мой проект был мигрирован из проекта PHP без каких-либо работ, который уже имеет свою собственную базу данных, поэтому у меня нет миграции для большинства данных...
Когда я пытаюсь запустить только e2e в докере, он говорит: 0 тестов.
Я считаю, что проблема в Chrome и установке драйвера Chrome в файле докера.
Я пробовал много вещей, но отметка сработала, и ошибок не возникает.
FROM openjdk:21-ea-21-jdk-slim AS...
Я использую комнату в Android с файлом .DB с данными предварительной нагрузки в активах. Когда я собираю и устанавливаю приложение в эмуляторе Android Studio с новыми данными (та же схема, но больше или разные данные на таблицах) в предварительно...
Я использую комнату в Android с файлом .db с предварительными данными в активах. Когда я собираю и устанавливаю приложение в эмуляторе Android Studio с новыми данными (та же схема, но больше или разные данные на таблицах) в предварительно...