Possible to relax Gherkin validation for simple steps generator.

This commit is contained in:
Vitalii Buriak 2020-04-20 22:58:26 +02:00 committed by Oleg Pidsadnyi
parent f3b92bd2d5
commit b6786a0102
3 changed files with 31 additions and 3 deletions

View File

@ -1175,6 +1175,16 @@ It will print the generated code to the standard output so you can easily redire
pytest-bdd generate features/some.feature > tests/functional/test_some.py
If your scenarios are not written in `proper` Gherkin language, e.g. they are more like textual scripts, then
you might find it hard to use `pytest-bdd generate` as by default it validates the order of step types (given-when-then).
To relax that validation, just pass ``--strict-gherkin=False`` to the ``scenario`` steps generator:
::
pytest-bdd generate --strict-gherkin=False <feature file name> .. <feature file nameN>
Advanced code generation
------------------------

View File

@ -126,7 +126,7 @@ def _find_step_fixturedef(fixturemanager, item, name, type_, encoding="utf-8"):
return fixturedefs
def parse_feature_files(paths):
def parse_feature_files(paths, **kwargs):
"""Parse feature files of given paths.
:param paths: `list` of paths (file or dirs)
@ -134,7 +134,7 @@ def parse_feature_files(paths):
:return: `list` of `tuple` in form:
(`list` of `Feature` objects, `list` of `Scenario` objects, `list` of `Step` objects).
"""
features = get_features(paths)
features = get_features(paths, **kwargs)
scenarios = sorted(
itertools.chain.from_iterable(feature.scenarios.values() for feature in features),
key=lambda scenario: (scenario.feature.name or scenario.feature.filename, scenario.name),

View File

@ -47,7 +47,7 @@ def check_existense(file_name):
def print_generated_code(args):
"""Print generated test code for the given filenames."""
features, scenarios, steps = parse_feature_files(args.files)
features, scenarios, steps = parse_feature_files(args.files, strict_gherkin=args.strict_gherkin)
code = generate_code(features, scenarios, steps)
if six.PY2:
print(code.encode("utf-8"))
@ -55,12 +55,30 @@ def print_generated_code(args):
print(code)
def str2bool(val):
"""Convert string to boolean."""
if "True" == val:
return True
elif "False" == val:
return False
else:
return val
def main():
"""Main entry point."""
parser = argparse.ArgumentParser(prog="pytest-bdd")
subparsers = parser.add_subparsers(help="sub-command help", dest="command")
subparsers.required = True
parser_generate = subparsers.add_parser("generate", help="generate help")
parser_generate.add_argument(
"--strict-gherkin",
default=True,
choices=[True, False],
type=str2bool,
metavar="[True|False]",
help="To strict or relax the validation (given-when-then)",
)
parser_generate.add_argument(
"files",
metavar="FEATURE_FILE",