Created
March 10, 2022 23:25
-
-
Save jonilsonds9/a2613fcdfaeff3e6ee7c5e93f9c575d5 to your computer and use it in GitHub Desktop.
Zombar o retorno do requests.codes do Python
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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