Pytest BDD: "TypeError: 'NoneType' object is not callable" when trying to use scenarios decorator

567 Views Asked by At

I have a number of tests that have the same feature file format, but pass across different arguments and assert different json responses so I want to use the scenarios decorator over scenario. The decorator I am trying to use is:

@scenarios("../../features/errors.feature")

When I try to use scenarios I get the following error from which I am not really able to work out what exactly is the issue:

==================================== ERRORS ====================================
_______ ERROR collecting functional/tests/test_api/test_api_error.py ________
src/test/functional/tests/test_api/test_api_error.py:17: in <module>
    def get_data(v4_auth, get_url, from_date, to_date):
E   TypeError: 'NoneType' object is not callable
=========================== short test summary info ============================
ERROR src/test/functional/tests/test_api/test_api_error.py - TypeError: 'N...
!!!!!!!!!!!!!!!!!!!! Interrupted: 1 error during collection !!!!!!!!!!!!!!!!!!!!
=============================== 1 error in 0.11s ===============================

If I use the scenario decorator and provide a stubbed method with pass for each scenario in the feature file then this works fine but now I have a lot of essentially redundant functions just to declare the scenarios.

For example:

@scenario(
    "../../features/error.feature",
    "Retrieve data with an invalid from date format",
)
def invalid_from_date():
    pass

@scenario(
    "../../features/errors.feature",
    "Retrieve data with an invalid to date format",
)
def invalid_to_date():
    pass

@scenario(
    "../../features/errors.feature",
    "Retrieve data with all invalid params",
)
def invalid_params():
    pass

When using the scenario decorator all fixtures work fine and the tests all pass, I thought from reading the documentation that all I need do is to use the scenarios decorator in place of this.

The line it falls over at is always the declaration of the first function it tries to call.

0

There are 0 best solutions below