]> git.ipfire.org Git - thirdparty/fastapi/fastapi.git/commitdiff
🌐 Add Chinese translation for `docs/zh/docs/advanced/testing-dependencies.md` (#3819)
authorjaystone776 <jilei776@gmail.com>
Sat, 30 Mar 2024 22:45:53 +0000 (06:45 +0800)
committerGitHub <noreply@github.com>
Sat, 30 Mar 2024 22:45:53 +0000 (17:45 -0500)
Co-authored-by: Sebastián Ramírez <tiangolo@gmail.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
docs/zh/docs/advanced/testing-dependencies.md [new file with mode: 0644]

diff --git a/docs/zh/docs/advanced/testing-dependencies.md b/docs/zh/docs/advanced/testing-dependencies.md
new file mode 100644 (file)
index 0000000..dc0f88b
--- /dev/null
@@ -0,0 +1,51 @@
+# 测试依赖项
+
+## 测试时覆盖依赖项
+
+有些场景下,您可能需要在测试时覆盖依赖项。
+
+即不希望运行原有依赖项(及其子依赖项)。
+
+反之,要在测试期间(或只是为某些特定测试)提供只用于测试的依赖项,并使用此依赖项的值替换原有依赖项的值。
+
+### 用例:外部服务
+
+常见实例是调用外部第三方身份验证应用。
+
+向第三方应用发送令牌,然后返回经验证的用户。
+
+但第三方服务商处理每次请求都可能会收费,并且耗时通常也比调用写死的模拟测试用户更长。
+
+一般只要测试一次外部验证应用就够了,不必每次测试都去调用。
+
+此时,最好覆盖调用外部验证应用的依赖项,使用返回模拟测试用户的自定义依赖项就可以了。
+
+### 使用 `app.dependency_overrides` 属性
+
+对于这些用例,**FastAPI** 应用支持 `app.dependcy_overrides` 属性,该属性就是**字典**。
+
+要在测试时覆盖原有依赖项,这个字典的键应当是原依赖项(函数),值是覆盖依赖项(另一个函数)。
+
+这样一来,**FastAPI** 就会调用覆盖依赖项,不再调用原依赖项。
+
+```Python hl_lines="26-27  30"
+{!../../../docs_src/dependency_testing/tutorial001.py!}
+```
+
+!!! tip "提示"
+
+    **FastAPI** 应用中的任何位置都可以实现覆盖依赖项。
+
+    原依赖项可用于*路径操作函数*、*路径操作装饰器*(不需要返回值时)、`.include_router()` 调用等。
+
+    FastAPI 可以覆盖这些位置的依赖项。
+
+然后,使用 `app.dependency_overrides` 把覆盖依赖项重置为空**字典**:
+
+```Python
+app.dependency_overrides = {}
+```
+
+!!! tip "提示"
+
+    如果只在某些测试时覆盖依赖项,您可以在测试开始时(在测试函数内)设置覆盖依赖项,并在结束时(在测试函数结尾)重置覆盖依赖项。