Possible to relax Gherkin validation for simple steps generator.
This commit is contained in:
parent
f3b92bd2d5
commit
b6786a0102
10
README.rst
10
README.rst
|
@ -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
|
||||
------------------------
|
||||
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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",
|
||||
|
|
Loading…
Reference in New Issue