I have the following code:
def get_mocked_contract_event():
event = {#stuff}
return event
@pytest.fixture(scope="function")
def context():
yield
@mock.patch("ticketfactory.TicketFactory", autospec = True)
def test_success_ticket(mock_ticket_factory, context):
return_ticket_mock = mock.Mock()
soap_mock = mock.Mock()
mock_ticket_factory.getTicket.return_value = return_ticket_mock
return_ticket_mock.buildRequest.return_value = soap_mock
from call_ticket_lambda import lambda_handler
response = lambda_handler(str(get_mocked_contract_event()), context)
assert response == "success string"
def test_contract_ticket_soap():
from call_ticket_lambda import TicketFactory
ticket = TicketFactory.getTicket("CONTRACT")
Logger().info("ticket:" + str(type(ticket)))
assert isinstance(ticket, ContractTicket) == True
test_success_ticket
works like a charm. However, when I try to run test_contract_ticket_soap()
, it fails on an AssertionError, saying its a mock.
The error: test_call_ticket_lambda.py:93: AssertionError
The log: {"level":"INFO","location":"test_ticket_soap:91","message":"ticket:<class 'unittest.mock.Mock'>"}
It seems as though the @patch decorators are somehow extending beyond the test_success_ticket
method. How is this possible? Is there some sort of teardown logic I need to run between each test case?