我尝试了下面的代码。
但问题是我在运行代码时遇到错误。我的论据是否正确?
这是自定义验证器。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'
的原因。虽然还有其他方法可以做到这一点
感谢所有回复的人。
>>$env:FLASK_ENV="pytest" >>pytest -q --capture=no
与
make_password_contain_capital(form, field)
包含
field
(a plaintext_password_contains_capital_form
)。然后你尝试访问不存在的str
。
你可以为它创建一个模拟data