I have a function that I am trying to test in querySomething.py:
class QuerySomething: def retrieveIssues(self,token): responses = [] if "customFields" in self._event: if not self.custom_fields: fields = [] else: fields = self.custom_fields else: fields = [] for issueTypeKey, issueTypeValue in self.issueTypes.items(): print(issueTypeKey, ":", issueTypeValue) query = self.getQuery(issueTypeValue, self.status, fields) respons = httpClient.get_request(query, token) responses.append(respons) return responses
And the test file:
def mock_getQuery(): return "QUERY" def mock_response(state): if state=="unauth": with open("src/tests/mockdata/unauthorized_api_response.json","r") as response_file: unauth_error = response_file.read() return json.dumps(unauth_error) elif state=="auth": with open("src/tests/mockdata/success_api_response.json","r") as response_file: success_message = response_file.read() return json.dumps(success_message) return "No message" class test_query(unittest.TestCase): @mock.patch("querySomething.QuerySomething.getQuery", side_effect=mock_getQuery) @mock.patch("httpClient.get_request", side_effect=mock_response) def test_retreiveIssues_unauth_response(self,mock_get,QuerySomething): self.assertEqual(QuerySomething.retrieveIssues("token"),mock_response("unauth")) if __name__ == "__main__": unittest.main()
I am trying to mock the httpClient.get_request so that it gets the JSON file instead of reaching out to the API. We want to test an unauthorized response and a success response which explains the mock_response function. However, when I run the test, I get the following:
AssertionError: <MagicMock name='getQuery.retri[36 chars]712'> != '"{\n \"errorMessages\": [\n [131 chars]n}"'
which is somewhat correct, but we need just the text, not the object. I read that I need to call the function, but when I try to call the function it throws a ModuleNotFound
or NotAPackage
error. What do I need to do to mock the httpClient.get_request and return the JSON string in the retrieveIssues function?
Advertisement
Answer
Updated, I was able to pull the JSON from the other file, and then was able to mock the return value as follows:
QuerySomething.retrieveIssues.return_value=load_json("unauth")
where load_json(“unauth”) pulls from the JSON response file.