AssertionError, когда я пытаюсь провести юнит-тест - PullRequest
0 голосов
/ 17 июня 2019

Я создаю веб-интерфейс для сайта, который будет работать с сертификатами, используя инфраструктуру Flask.Я хочу научиться выполнять модульные тесты.Я создал файл, который будет запускать тест и проверять файл routers.py.

Код Test.py:

import unittest
import sys
sys.path.insert(0, 'app/')
import routes


class FlaskrTestCase(unittest.TestCase):

    def setUp(self):
        pass

    def tearDown(self):
        pass

    def test_my_file(self):
        self.assertTrue(Certificate.IsValid(all_cert[2]))


if __name__ == '__main__':
    unittest.main()

Я думаю, что ошибка связана с этой частью кода в routers.py:

@app.route('/')
@app.route('/index')
def index():
    return render_template('index.html', title='Home', all_cert = all_cert)


@app.route('/all_certificates')
def all_certificates():
    return render_template('all_certificates.html', title='all_certificates', all_cert = all_cert)

Это работает, когдаЯ выполняю команду "flask run", но если я вхожу в python3 -m unittest test.py, я получаю сообщение об ошибке:

  File "/home/marka/Документы/Practice/test.py", line 4, in <module>
    import routes
  File "app/routes.py", line 30, in <module>
    @app.route('/index')
  File "/home/marka/Документы/Practice/venv/lib/python3.5/site-packages/flask/app.py", line 1251, in decorator
    self.add_url_rule(rule, endpoint, f, **options)
  File "/home/marka/Документы/Practice/venv/lib/python3.5/site-packages/flask/app.py", line 67, in wrapper_func
    return f(self, *args, **kwargs)
  File "/home/marka/Документы/Practice/venv/lib/python3.5/site-packages/flask/app.py", line 1222, in add_url_rule
    'existing endpoint function: %s' % endpoint)
AssertionError: View function mapping is overwriting an existing endpoint function: index

Я нашел похожую ветку на форуме: AssertionError: Просмотр функцииотображение переписывает существующую функцию конечной точки: main , но я не знаю, как применить ее в моем коде.Что вызвало ошибку?Как по-разному использовать декораторы?

Я попытался переименовать индекс функции:

def index():
    index.func_name = func.func_name
    return render_template('index.html', title='Home', all_cert = all_cert)

, тогда я получаю ошибку:

  File "/home/marka/Документы/Practice/test.py", line 4, in <module>
    import routes
  File "app/routes.py", line 33
    return render_template('index.html', title='Home', all_cert = all_cert)
                                                                          ^
IndentationError: unindent does not match any outer indentation level

В тесте я быЛюблю проверять функции, которые хранят сертификат и проверять его действительность.Весь мой код в https://github.com/Butyrate/CertificationCenter.

Спасибо.

1 Ответ

0 голосов
/ 17 июня 2019

Вы получаете эту ошибку, потому что ваш routes модуль загружается дважды. Как вы знаете, python загружает модули только один раз. Исключением из этого правила является то, что вы добавляете модуль несколько раз в путь Python:

sys.path.insert(0, 'app/')

Если вы удалите эту строку, вы не будете переопределять основную функцию несколько раз. Вы можете проверить, что я вам говорю, просто написав print в верхнем уровне вашего routes.py файла. Вы увидите, как он печатается два раза.

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