pytest-dev / pytest-bdd

BDD library for the pytest runner

Home Page:https://pytest-bdd.readthedocs.io/en/latest/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Re-use of target_fixture not possible anymore

chrcoen opened this issue · comments

The following test will pass in pytest=8.0.2, pytest-bdd=7.2.1, but will fail in pytest=8.1.0, pytest-bdd=7.2.1.

@given(parsers.parse('the value {value:d}'), target_fixture='x')
def step(value):
    return value

@when(parsers.parse('multiplied by {value:d}'), target_fixture='result')
def step(x, value):
    return x * value

@then(parsers.parse('the result should be {value:d}'))
def step(result, value):
    assert result == value

Scenario: Multiply
    Given the value 7
    When multiplied by 7
    Then the result should be 49
    When multiplied by 3
    Then the result should be 27
result = 49, value = 27

    @then(parsers.parse('the result should be {value:d}'))
    def step(result, value):
>       assert result == value
E       assert 49 == 27

test_multiply.py:26: AssertionError

It seems like the target fixture values are chached and the when step is not executed again.

I also setup an example to report the issue and stumbled upon this one.

Feature: Numbers
    Scenario: Increment
        Given the number "1"
        And the number is "1"
        When the number is incremented
        Then the number is "2"
from pytest_bdd import given, parsers, scenario, then, when


@scenario("numbers.feature", "Increment")
def test_increment():
    pass


@given(parsers.parse('the number "{value:d}"'), target_fixture="number")
def the_number(value):
    return value


@when("the number is incremented", target_fixture="number")
def the_number_is_changed_to(number):
    number += 1

    return number


@given(parsers.parse('the number is "{expected_value:d}"'))
@then(parsers.parse('the number is "{expected_value:d}"'))
def the_number_is(expected_value, number):
    assert expected_value == number

While And the number is "1" is fine the Then the number is "2" step feiles since the target fixture number is not correctly updated.

Confirming that pytest == 8.0.2 still works. Thanks @chrcoen for this important detail.

This appears to be the same issue re-reported in #689, with a pending fix in #690.

This was resolved in v7.3.0