Я пытаюсь выполнить модульное тестирование моего веб-приложения Flask. Я использую шаблон, который я видел в классе Udemy на Flask, и шаблон, подобный Mask-учебнику Flask онлайн (http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-vii-unit-testing). Проблема, с которой я сталкиваюсь, заключается в том, что тест фактически не создает свою собственную базу данных - скорее, она использует производственную базу данных и запутывает ее.Как настроить тестовый скрипт в Flask с SQLite?
Вот что tests.py сценарий выглядит следующим образом:
import os,sys
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
basedir = os.path.abspath(os.path.dirname(__file__))
import unittest
from myapp import app, db
from user.models import User
class UserTest(unittest.TestCase):
def setUp(self):
self.db_uri = 'sqlite:///' + os.path.join(basedir, 'test.db')
app.config['TESTING'] = True
app.config['WTF_CSRF_ENABLED'] = False
app.config['SQL_ALCHEMY_DATABASE_URI'] = self.db_uri
self.app = app.test_client()
db.create_all()
def tearDown(self):
db.session.remove()
db.drop_all()
def test_models(self):
#Create a customer user
user = User("John Doe", "[email protected]", "jdoe", "password", is_consultant=False)
db.session.add(user)
db.session.commit()
#Create 2 consultant users
user1 = User("Jane Doe", "[email protected]", "janedoe", "password", is_consultant=True)
db.session.add(user1)
user2 = User("Nikola Tesla", "[email protected]", "nikola", "password", is_consultant=True)
db.session.add(user2)
db.session.commit()
#Check that all users exist
assert len(User.query.all()) is 3
Мое приложение инициализации находится в той же папке, и выглядит так:
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
from flask.ext.migrate import Migrate
from flask.ext.login import LoginManager
app = Flask(__name__)
app.config.from_object('config')
db = SQLAlchemy(app)
# flask-login extension setup
login_manager = LoginManager()
login_manager.init_app(app)
# migration setup
migrate = Migrate(app, db)
from user import views
Я не понимаю, что происходит. Он никогда не создает базу данных SQLite test.db. Он всегда создает базу данных app.db. И если он есть, это полностью испортит базу данных. Впоследствии, если я делаю python manage.py runningerver - он больше не работает. Он говорит, что таблица не найдена. Потому что разрывы упали на все столы. Что происходит? И как мне это исправить?
Omigod Я понял это. Я установил неправильный ключ для URI базы данных. Это должно быть: app.config ['SQLALCHEMY_DATABASE_URI'] = self.db_uri –