def with_mock_responses(req_resp=None):
def decorator(f):
@functools.wraps(f)
def wrapper(*args, **kwargs):
class_name, func_name = re.sub(r'([A-Z]+)', r'_\1', args[0].__class__.__name__).lower().strip('_'), f.__name__
fixtures = load_reqresp_fixture(req_resp or "{}/{}".format(class_name, func_name))
with responses.RequestsMock(assert_all_requests_are_fired=False) as rsps:
for fixture in fixtures:
if 'url_re' in fixture:
url_re = fixture.pop('url_re')
fixture['url'] = re.compile(Client.build_url(url_re))
else:
fixture['url'] = Client.build_url(fixture['url'])
if "content_type" in fixture and fixture['content_type'] == "application/json":
fixture['body'] = json.dumps(fixture['body'])
rsps.add(**fixture)
return f(responses=rsps, *args, **kwargs)
return wrapper
return decorator
评论列表
文章目录