我如何对 Flask wtforms 自定义验证器进行 pytest?

问题描述 投票:0回答:1

我尝试了下面的代码。

但问题是我在运行代码时遇到错误。我的论据是否正确?

这是自定义验证器。

auth/functions.py

make_password_contain_capital

测试/non_db_functions/login_routes.py

def make_password_contain_capital(form, field): ''' This works if the password contains a capital Char and raises an ValidationError if it does not. This runs in the class RegistrationForm in passwordfield + confirmpasswordfield column ''' password_form = field.data word = password_form # any returns True when any value of char is True # loops through each word into a char and if any char is an uppercase return True else return False letter = [char for char in word if char.isupper()] # if the string returns a value then the string has an capital if letter: flash("Success password does contain a capital") return None # else executes if "letter" is an empyty string else: raise ValidationError("Please include a capital letter in the password field"

我收到的错误如下。

from app.auth.functions import make_password_contain_capital from wsgi import app from app.auth.forms import LoginForm from wtforms.validators import ValidationError @pytest.fixture def plaintext_password_contains_capital_form(): password_form ='Aejfpwo;fkjeo;' return password_form def test_password(plaintext_password_contains_capital_form) with app.test_request_context(): form = LoginForm() field = plaintext_password_contains_capital_form with pytest.raises(ValidationError): make_password_contain_capital(form, field)

我该如何解决这个问题?

我正在从 wsgi.py 导入应用程序,并且我有一个单独的 PytestConfig 类,这就是我运行

plaintext_password_contains_capital_form = 'Aejfpwo;fkjeo;' def test_password(plaintext_password_contains_capital_form ): with app.test_request_context(): form = LoginForm() field = plaintext_password_contains_capital_form with pytest.raises(ValidationError): > make_password_contain_capital(form, field) app\tests\non_db_functions\login_routes.py:68: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ form = <app.auth.forms.LoginForm object at 0x000002045E5EC5E0>, field = 'Aejfpwo;fkjeo;' def make_password_contain_capital(form, field): ''' This works if the password contains a capital Char and raises an ValidationError if it does not. This runs in the class RegistrationForm in passwordfield + confirmpasswordfield column ''' > password_form = field.data E AttributeError: 'str' object has no attribute 'data' app\auth\functions.py:16: AttributeError ============================================================ short test summary info ============================================================= FAILED app/tests/non_db_functions/login_routes.py::test_password - AttributeError: 'str' object has no attribute 'data'

的原因。虽然还有其他方法可以做到这一点

感谢所有回复的人。

python flask pytest flask-wtforms wtforms
1个回答
0
投票

>>$env:FLASK_ENV="pytest" >>pytest -q --capture=no

make_password_contain_capital(form, field)

包含

field
(a
plaintext_password_contains_capital_form
)。
然后你尝试访问不存在的

str

你可以为它创建一个模拟

data

© www.soinside.com 2019 - 2024. All rights reserved.