Response to feedback
This commit is contained in:
parent
7e3d6dc819
commit
42f7560853
36
README.rst
36
README.rst
|
@ -514,8 +514,8 @@ Example:
|
||||||
assert cucumbers["start"] - cucumbers["eat"] == left
|
assert cucumbers["start"] - cucumbers["eat"] == left
|
||||||
|
|
||||||
|
|
||||||
Datatable Argument and Accessing the Datatable
|
Datatables
|
||||||
--------------------------------------------
|
----------
|
||||||
|
|
||||||
The ``datatable`` argument allows you to utilise data tables defined in your Gherkin scenarios
|
The ``datatable`` argument allows you to utilise data tables defined in your Gherkin scenarios
|
||||||
directly within your test functions. This is particularly useful for scenarios that require tabular data as input,
|
directly within your test functions. This is particularly useful for scenarios that require tabular data as input,
|
||||||
|
@ -606,8 +606,8 @@ Full example:
|
||||||
assert users_have_correct_permissions(users, expected_permissions)
|
assert users_have_correct_permissions(users, expected_permissions)
|
||||||
|
|
||||||
|
|
||||||
Docstring Argument and Accessing the Docstring
|
Docstrings
|
||||||
---------------------------------------------
|
----------
|
||||||
|
|
||||||
The `docstring` argument allows you to access the Gherkin docstring defined in your steps as a multiline string.
|
The `docstring` argument allows you to access the Gherkin docstring defined in your steps as a multiline string.
|
||||||
The content of the docstring is passed as a single string, with each line separated by `\\n`.
|
The content of the docstring is passed as a single string, with each line separated by `\\n`.
|
||||||
|
@ -635,48 +635,54 @@ Full example:
|
||||||
Feature: Docstring
|
Feature: Docstring
|
||||||
|
|
||||||
Scenario: Step with docstrings
|
Scenario: Step with docstrings
|
||||||
Given a step has a docstring
|
Given some steps will have docstrings
|
||||||
|
|
||||||
|
Then a step has a docstring
|
||||||
"""
|
"""
|
||||||
This is a given docstring
|
This is a docstring
|
||||||
on two lines
|
on two lines
|
||||||
"""
|
"""
|
||||||
|
|
||||||
When a step provides a docstring with lower indentation
|
And a step provides a docstring with lower indentation
|
||||||
"""
|
"""
|
||||||
This is a when docstring
|
This is a when docstring
|
||||||
"""
|
"""
|
||||||
|
|
||||||
And this step has no docstring
|
And this step has no docstring
|
||||||
|
|
||||||
Then this step has a greater indentation
|
And this step has a greater indentation
|
||||||
"""
|
"""
|
||||||
This is a then docstring
|
This is a docstring
|
||||||
"""
|
"""
|
||||||
|
|
||||||
And this step has no docstring
|
And this step has no docstring
|
||||||
|
|
||||||
.. code-block:: python
|
.. code-block:: python
|
||||||
|
|
||||||
from pytest_bdd import given, when, then
|
from pytest_bdd import given, then
|
||||||
|
|
||||||
@given("a step has a docstring")
|
@given("some steps will have docstrings")
|
||||||
|
def _():
|
||||||
|
pass
|
||||||
|
|
||||||
|
@then("a step has a docstring")
|
||||||
def _(docstring):
|
def _(docstring):
|
||||||
assert docstring == "This is a given docstring\non two lines"
|
assert docstring == "This is a given docstring\non two lines"
|
||||||
|
|
||||||
@when("a step provides a docstring with lower indentation")
|
@then("a step provides a docstring with lower indentation")
|
||||||
def _(docstring):
|
def _(docstring):
|
||||||
print(docstring)
|
assert docstring == "This is a when docstring"
|
||||||
|
|
||||||
@then("this step has a greater indentation")
|
@then("this step has a greater indentation")
|
||||||
def _(docstring):
|
def _(docstring):
|
||||||
print(docstring)
|
assert docstring == "This is a when docstring"
|
||||||
|
|
||||||
@then("this step has no docstring")
|
@then("this step has no docstring")
|
||||||
def _():
|
def _():
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
.. NOTE:: The docstring argument can only be used for steps that have an associated docstring.
|
.. note:: The ``docstring`` argument can only be used for steps that have an associated docstring.
|
||||||
Otherwise, an error will be thrown.
|
Otherwise, an error will be thrown.
|
||||||
|
|
||||||
Organizing your scenarios
|
Organizing your scenarios
|
||||||
|
|
|
@ -34,9 +34,8 @@ def test_steps_with_docstrings(pytester):
|
||||||
pytester.makeconftest(
|
pytester.makeconftest(
|
||||||
textwrap.dedent(
|
textwrap.dedent(
|
||||||
r"""
|
r"""
|
||||||
from pytest_bdd import given, when, then, parsers
|
from pytest_bdd import given, when, then
|
||||||
from pytest_bdd.utils import dump_obj
|
from pytest_bdd.utils import dump_obj
|
||||||
import re
|
|
||||||
|
|
||||||
|
|
||||||
@given("a step has a docstring")
|
@given("a step has a docstring")
|
||||||
|
@ -80,9 +79,7 @@ def test_steps_with_docstrings(pytester):
|
||||||
result.assert_outcomes(passed=1)
|
result.assert_outcomes(passed=1)
|
||||||
|
|
||||||
docstrings = collect_dumped_objects(result)
|
docstrings = collect_dumped_objects(result)
|
||||||
assert docstrings[0] == "This is a given docstring"
|
assert docstrings == ["This is a given docstring", "This is a when docstring", "This is a then docstring"]
|
||||||
assert docstrings[1] == "This is a when docstring"
|
|
||||||
assert docstrings[2] == "This is a then docstring"
|
|
||||||
|
|
||||||
|
|
||||||
def test_steps_with_missing_docstring(pytester):
|
def test_steps_with_missing_docstring(pytester):
|
||||||
|
@ -106,8 +103,7 @@ def test_steps_with_missing_docstring(pytester):
|
||||||
pytester.makeconftest(
|
pytester.makeconftest(
|
||||||
textwrap.dedent(
|
textwrap.dedent(
|
||||||
"""\
|
"""\
|
||||||
from pytest_bdd import given, when, then, parsers
|
from pytest_bdd import given, when, then
|
||||||
from re import DOTALL
|
|
||||||
|
|
||||||
|
|
||||||
@given("this step has a docstring")
|
@given("this step has a docstring")
|
||||||
|
@ -142,3 +138,64 @@ def test_steps_with_missing_docstring(pytester):
|
||||||
result = pytester.runpytest("-s")
|
result = pytester.runpytest("-s")
|
||||||
result.assert_outcomes(failed=1)
|
result.assert_outcomes(failed=1)
|
||||||
result.stdout.fnmatch_lines(["*fixture 'docstring' not found*"])
|
result.stdout.fnmatch_lines(["*fixture 'docstring' not found*"])
|
||||||
|
|
||||||
|
|
||||||
|
def test_steps_with_docstring_missing_argument_in_step_def(pytester):
|
||||||
|
pytester.makefile(
|
||||||
|
".feature",
|
||||||
|
missing_docstring_arg=textwrap.dedent(
|
||||||
|
'''\
|
||||||
|
Feature: Missing docstring
|
||||||
|
|
||||||
|
Scenario: Docstring arg is missing for a step definition
|
||||||
|
Given this step has a docstring
|
||||||
|
"""
|
||||||
|
This is a given docstring
|
||||||
|
"""
|
||||||
|
|
||||||
|
When this step has a docstring but no docstring argument
|
||||||
|
"""
|
||||||
|
This is a when docstring
|
||||||
|
"""
|
||||||
|
|
||||||
|
Then the test passes
|
||||||
|
'''
|
||||||
|
),
|
||||||
|
)
|
||||||
|
pytester.makeconftest(
|
||||||
|
textwrap.dedent(
|
||||||
|
"""\
|
||||||
|
from pytest_bdd import given, when, then
|
||||||
|
|
||||||
|
|
||||||
|
@given("this step has a docstring")
|
||||||
|
def _(docstring):
|
||||||
|
print(docstring)
|
||||||
|
|
||||||
|
|
||||||
|
@when("this step has a docstring but no docstring argument")
|
||||||
|
def _():
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
@then("the test passes")
|
||||||
|
def _():
|
||||||
|
pass
|
||||||
|
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
pytester.makepyfile(
|
||||||
|
textwrap.dedent(
|
||||||
|
"""\
|
||||||
|
from pytest_bdd import scenario
|
||||||
|
|
||||||
|
@scenario("missing_docstring_arg.feature", "Docstring arg is missing for a step definition")
|
||||||
|
def test_docstring():
|
||||||
|
pass
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
)
|
||||||
|
result = pytester.runpytest("-s")
|
||||||
|
result.assert_outcomes(passed=1)
|
||||||
|
|
Loading…
Reference in New Issue