Уважение перенаправления на маршрутах Flask в тестовой среде - PullRequest
0 голосов
/ 08 мая 2018

У меня есть бэкэнд Flask, для которого я настраиваю тестирование. Он находится на ранних стадиях, поэтому в настоящее время настроено только 4 теста, но каждый из них достигает конечной точки перенаправления, которая затем должна быть перенаправлена ​​в определенное место (в зависимости от входа в систему, сеанса и т. Д.). Все 4 теста проходят локально в новой pipenv среде, настроенной на тот же Pipfile, что и Travis. По некоторым причинам это не ведет себя как ожидалось на перенаправлениях в Travis. Для справки, вот моя тестовая структура:

class TestApp(unittest.TestCase):
    def setUp(self):
        self.app = app.test_client()
        self.app.testing = True

    def test_blind_home_redirect(self):
        result = self.app.get('/')
        self.assertEqual(result.status_code, 302)

        result = self.app.get('/', follow_redirects=True)
        self.assertEqual(result.status_code, 200)

Первое утверждение не выдает ошибку, но второе, проверяющее, что оно следовало за перенаправлением, возвращает status_code 404 вместо 200. Второй тест, использующий ту же логику для другой конечной точки, также проходит проверку 302, но отказывает 200 с другим 404. Одна проверка, что все "защищенные" конечные точки, перенаправляющие на вход в систему, приводит к неожиданному объекту, возвращаемому:

    for endpoint in known_login_check:
        result = self.app.get('/{}'.format(endpoint))
        self.assertEqual(result.status_code, 302)

        # Make sure all are sent to the index
        result = self.app.get('/{}'.format(endpoint),
                              follow_redirects=True)
        sender = pathlib.Path(result.response.file.name)
        self.assertEqual(sender.name, 'index.html')

Этот сбой на sender = ... с AttributeError: 'ClosingIterator' object has no attribute 'file', но снова проходит локально.

Похоже, что все они не работают ТОЛЬКО при перенаправлении. Есть ли что-то, что должно быть настроено, чтобы это работало в Travis, по какой-то причине моя локальная машина обрабатывает? Опять же, это тот же самый используемый Pipfile, и я удалил свой локальный env и переделал его, чтобы убедиться, но он все еще проходит локально.

...