#python #flask
#python #flask
Вопрос:
Тест по-прежнему выполняет запись в мою базу данных MySQL вместо базы данных временных файлов sqlite. Почему это происходит? Спасибо!
Вот мой код:
class UserTests(unittest.TestCase):
def setUp(self):
self.app = get_app()
#declare testing state
self.app.config["TESTING"] = True
self.db, self.app.config["DATABASE"] = tempfile.mkstemp()
#spawn test client
self.client = self.app.test_client()
#temp db
init_db()
def tearDown(self):
os.close(self.db)
os.unlink(self.app.config["DATABASE"])
def test_save_user(self):
#create test user with 3 friends
app_xs_token = get_app_access_token(APP_ID, APP_SECRET)
test_user = create_test_user(APP_ID, app_xs_token)
friend_1 = create_test_user(APP_ID, app_xs_token)
friend_2 = create_test_user(APP_ID, app_xs_token)
friend_3 = create_test_user(APP_ID, app_xs_token)
make_friend_connection(test_user["id"], friend_1["id"], test_user["access_token"], friend_1["access_token"])
make_friend_connection(test_user["id"], friend_2["id"], test_user["access_token"], friend_2["access_token"])
make_friend_connection(test_user["id"], friend_3["id"], test_user["access_token"], friend_3["access_token"])
save_user(test_user["access_token"])
Ответ №1:
Эта строка может быть проблемой:
self.db, self.app.config["DATABASE"] = tempfile.mkstemp()
print
извлеките значения self.db
и self.app.config["DATABASE"]
и убедитесь, что они соответствуют вашим ожиданиям.
Ответ №2:
Вероятно, вы хотите выяснить, где в коде вашей базы данных указана ваша конфигурация self.app.config["DATABASE"]
.
Код примера Flask обычно выполняет большую работу при первом импорте модуля. Это приводит к сбоям при попытке динамически изменять значения во время выполнения, потому что к тому времени уже слишком поздно.
Вероятно, вам потребуется использовать фабрику приложений, чтобы ваше приложение не было создано до запуска тестового кода. Кроме того, шаблон app factory подразумевает, что вы используете интерфейс Blueprint вместо прямой app
ссылки, которая получается с помощью циклического импорта в коде примера.