У меня есть этот код:Использовать базу данных в памяти отдельно для тестирования - как?
my_app.py:
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
import os
app = Flask(__name__)
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
app.config["BASE_DIR"] = os.path.abspath(os.path.dirname(__file__))
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///" + os.path.abspath(os.path.join(app.config["BASE_DIR"], "app.db"))
db = SQLAlchemy(app)
from user import User
# create all tables
db.create_all()
if not User.query.filter_by(username="test").first():
dummy_user = User(username="test", password="", email="")
db.session.add(dummy_user)
db.session.commit()
user.py:
from flask.ext.login import UserMixin
from my_app import db
class User(db.Model):
__tablename__ = "users"
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(255), nullable=False, unique=True)
email = db.Column(db.String(255), nullable=False, unique=True)
password = db.Column(db.String(255), nullable=False)
tests.py:
from flask.ext.testing import TestCase
from my_app import app, db
from user import User
import os
import unittest
class MyTestCase(TestCase):
def create_app(self):
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///:memory:"
app.config["TESTING"] = True
return app
def setUp(self):
db.create_all()
def tearDown(self):
db.session.remove()
db.drop_all()
def test_dummy(self):
assert User.query.count() == 0
if __name__ == '__main__':
unittest.main()
Как я могу сделать модульную проверку?
Я хочу, чтобы мои юнит-тесты, чтобы использовать в оперативной памяти базы данных отдельно от основного приложения, но, видимо, я не могу сделать это так, как я пытался (только изменяя значение SQLALCHEMY_DATABASE_URI)
Спасибо заранее!
Здесь есть несколько полезных битов: http://flask.pocoo.org/docs/0.10/config/#development-production – reptilicus
Я не думаю, что это полезно для моей проблемы. Я уже определяю другую конфигурацию, чем та, которая используется для производства. – CryNickSystems
Вы называете 'create_app'? – dirn