Почему в моем модульном тесте с колбой не используется база данных временных файлов, если я указал это? - PullRequest
2 голосов
/ 11 ноября 2011

Тест все еще пишет в мою базу данных MySQL вместо базы данных sqlite tempfile. Почему это происходит? Спасибо!

Вот мой код:

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"]) 

Ответы [ 2 ]

1 голос
/ 11 ноября 2011

Эта строка может быть проблемой:

self.db, self.app.config["DATABASE"] = tempfile.mkstemp()

print из значений self.db и self.app.config["DATABASE"] и убедитесь, что они соответствуют вашим ожиданиям.

0 голосов
/ 15 ноября 2011

Возможно, вы захотите выяснить, где в вашей базе данных есть ссылка на конфигурацию self.app.config["DATABASE"].

Пример кода Flask обычно выполняет большую работу при первом импорте модуля.Это имеет тенденцию ломать вещи, когда вы пытаетесь динамически изменять значения во время выполнения, потому что к тому времени уже слишком поздно.

Возможно, вам потребуется использовать фабрику приложений , чтобы ваше приложение непостроен до запуска тестового кода.Кроме того, шаблон фабрики приложений подразумевает, что вы используете интерфейс Blueprint вместо прямой ссылки app, которая получается с помощью циклического импорта в примере кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...