Skip to content

Instantly share code, notes, and snippets.

@jonilsonds9
Created March 10, 2022 23:25
Show Gist options
  • Save jonilsonds9/a2613fcdfaeff3e6ee7c5e93f9c575d5 to your computer and use it in GitHub Desktop.
Save jonilsonds9/a2613fcdfaeff3e6ee7c5e93f9c575d5 to your computer and use it in GitHub Desktop.
Zombar o retorno do requests.codes do Python
# Digamos que numa classe você tenta um if que pega os status_codes default disponibilizados pela lib:
if res.status_code == requests.codes['ok']: # esse requests é a lib
return True
# e que você estar mocando (mock) no teste usando uma fixture:
@pytest.fixture(scope='function')
def requests():
with patch('src.my_class.requests') as requests_mock:
# aqui vamos fazer a mágica
yield requests_mock
# O que acontece sempre que o if acima tentar buscar o código ele recebe o MagicMock e sempre falha o nosso teste
# já que o statud_code do `res` é diferente de um objeto MagicMock. Então precisamos dizer ao mock para ele ter ou
# chamar uma função pra resolver isso pra gente.
# Nesse caso podemos ter um dict fake apenas com os códigos que usamos no teste:
codes = {
200: 'ok',
404: 'not_found',
}
# E podemos usar de duas formas, a primeira é fazer com que o mock chame a `__getitem__` do proprio dic acima:
requests_mock.codes.__getitem__.side_effect = _codes.__getitem__
# E outra alternativa seria ter uma função que busca pelo valor a chave:
def __get_status_code(value: str) -> int:
codes = {
200: 'ok',
404: 'not_found',
}
for key, val in codes.items():
if value in val:
return key
# E no mock podemos fazer o mesmo processo feito antes só que usando uma função lamda da seguinte forma:
requests_mock.codes.__getitem__.side_effect = lambda x: __get_status_code(x)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment