mirror of
https://github.com/kennethreitz/pydantic.git
synced 2026-06-05 23:00:18 +00:00
include assert in validator test in pytest (#2033)
* include assert in valudator test in pytest * remove try_assert execution in Makefile * use pytest.raises * add newline * tweak * undo my mistake Co-authored-by: Samuel Colvin <s@muelcolvin.com>
This commit is contained in:
@@ -60,7 +60,6 @@ mypy:
|
||||
.PHONY: test
|
||||
test:
|
||||
pytest --cov=pydantic
|
||||
@python tests/try_assert.py
|
||||
|
||||
.PHONY: testcov
|
||||
testcov: test
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
"""
|
||||
PYTEST_DONT_REWRITE
|
||||
"""
|
||||
import pytest
|
||||
|
||||
from pydantic import BaseModel, ValidationError, validator
|
||||
|
||||
|
||||
def test_assert_raises_validation_error():
|
||||
class Model(BaseModel):
|
||||
a: str
|
||||
|
||||
@validator('a')
|
||||
def check_a(cls, v):
|
||||
assert v == 'a', 'invalid a'
|
||||
return v
|
||||
|
||||
assert Model(a='a').a == 'a'
|
||||
|
||||
with pytest.raises(ValidationError) as exc_info:
|
||||
Model(a='snap')
|
||||
|
||||
expected_errors = [{'loc': ('a',), 'msg': 'invalid a', 'type': 'assertion_error'}]
|
||||
actual_errors = exc_info.value.errors()
|
||||
if expected_errors != actual_errors:
|
||||
pytest.fail(f'Actual errors: {actual_errors}\nExpected errors: {expected_errors}')
|
||||
@@ -1,33 +0,0 @@
|
||||
"""
|
||||
This test is executed separately due to pytest's assertion-rewriting
|
||||
"""
|
||||
from pydantic import BaseModel, ValidationError, validator
|
||||
|
||||
|
||||
def test_assert_raises_validation_error():
|
||||
test_name = test_assert_raises_validation_error.__name__
|
||||
|
||||
class Model(BaseModel):
|
||||
a: str
|
||||
|
||||
@validator('a')
|
||||
def check_a(cls, v):
|
||||
assert v == 'a', 'invalid a'
|
||||
return v
|
||||
|
||||
Model(a='a')
|
||||
expected_errors = [{'loc': ('a',), 'msg': 'invalid a', 'type': 'assertion_error'}]
|
||||
|
||||
try:
|
||||
Model(a='snap')
|
||||
except ValidationError as exc:
|
||||
actual_errors = exc.errors()
|
||||
if actual_errors != expected_errors:
|
||||
raise RuntimeError(f'{test_name}:\nActual errors: {actual_errors}\nExpected errors: {expected_errors}')
|
||||
else:
|
||||
raise RuntimeError(f'{test_name}: ValidationError was not raised')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
test_assert_raises_validation_error()
|
||||
print('Non-pytest assert tests passed')
|
||||
Reference in New Issue
Block a user