[英]Testing a decorated API route in Flask
I have the following simple controller 我有以下简单的控制器
@companies.route('/companies/<int:id>', methods=['GET'])
@inject_repository(CompanyRepository)
def get_company(repository, id):
"""
GET /companies/id
"""
company = repository.get(pk=id)
return jsonify(company.to_json())
The DAO is being injected by @inject_repository(CompanyRepository)
DAO由
@inject_repository(CompanyRepository)
注入
I do not, however, get what is happening at test time: 但是,我不了解测试时发生的情况:
def test_get_company(self):
response = self.client.get(url_for('companies.get_company', id=1))
data = json.loads(response.get_data(as_text=True))
assert_equal(response.status_code, 200)
I get the following error 我收到以下错误
TypeError: get_company() missing 1 required positional argument: 'id'
Isn't the controller being decorated? 控制器没有装饰吗?
Decorator code 装饰代码
def inject_repository(repository_class):
def decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
if 'psql' in class_init_fields(repository_class):
repository = psql_repository_for(
repository_model=repository_class,
connection_meta=current_app.config['POSTGRESQL'])
else:
raise ValueError("'{}' repository cannot be injected".format(repository_class.__name__))
return func(repository=repository)
return wrapper
return decorator
You're not passing the arguments on from your decorator to the decorated function. 您没有将参数从装饰器传递到装饰的函数。
def wrapper(*args, **kwargs):
...
kwargs['repository'] = repository
return func(*args, **kwargs)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.