在测试环境中尊重Flask路由上的重定向

时间:2018-05-08 17:13:55

标签: python flask travis-ci pytest python-unittest

我有一个Flask后端,我正在设置测试。它处于早期阶段,因此目前只设置了4个测试,但每个测试都会命中一个重定向端点,然后应该重定向到特定位置(取决于登录,会话等)。所有4个测试都在使用与Travis相同的pipenv设置的新Pipfile环境中本地传递。出于某种原因,它在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并重新制作以确保,但它仍然在本地传递。

0 个答案:

没有答案