Here is my code, where I would like to test validate_yaml
function (I removed the function bodies, because they don't needed in question):
yaml_file_name = "env.yaml"
def load_yaml(file: str) -> list:
pass
def validate_yaml(env_list: list):
pass
def yaml_to_env(env_list: list):
pass
env_list = load_yaml(f"{yaml_file_name}")
validate_yaml(env_list)
yaml_to_env(env_list)
This is my test file:
import pytest
import jsonschema
from yaml_to_env import load_yaml, validate_yaml
@pytest.mark.parametrize(
"invalid_yaml",
[
(load_yaml("tests/yaml_files/invalid_workload_type.yaml")),
],
)
def test_yaml_env(invalid_yaml):
with pytest.raises(jsonschema.ValidationError):
validate_yaml(invalid_yaml)
My problem is that when I run pytest
then the last three rows are executed too:
env_list = load_yaml(f"{yaml_file_name}")
validate_yaml(env_list)
yaml_to_env(env_list)
Why it is doing this? I would like to test only validate_yaml
function and not call that three lines during pytest
.
Thanks in advance
[EDIT1]
This is the best solution what I found so far:
if __name__ == "__main__":
env_list = load_yaml(f"{yaml_file_name}")
validate_yaml(env_list)
yaml_to_env(env_list)