У меня есть бэкэнд 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 и переделал его, чтобы убедиться, но он все еще проходит локально.