在进行 Miguel Grinberg 的 Flask Web 开发时,我在测试 gravatar 代码时卡住了,
def test_gravatar(self):
u = User(email='john@example.com', password='cat')
with self.app.test_request_context('/'):
gravatar = u.gravatar()
gravatar_256 = u.gravatar(size=256)
gravatar_pg = u.gravatar(rating='pg')
gravatar_retro = u.gravatar(default='retro')
with self.app.test_request_context('/', base_url='https://example.com'):
gravatar_ssl = u.gravatar()
self.assertTrue('http://www.gravatar.com/avatar/' +
'd4c74594d841139328695756648b6bd6'in gravatar)
self.assertTrue('s=256' in gravatar_256)
self.assertTrue('r=pg' in gravatar_pg)
self.assertTrue('d=retro' in gravatar_retro)
self.assertTrue('https://secure.gravatar.com/avatar/' +
'd4c74594d841139328695756648b6bd6' in gravatar_ssl)
app.test_request_context() 有什么作用,它与 app_context() 有何不同?
为什么我们甚至需要调用 self.app.test_request_context('/')?此外,我们可以做哪些更改以将调用转移到 SetUp() 中的 app.test_request_context()?
最佳答案
关于这个主题有很多阅读资料,所以从文档开始:app_context
, test_request_context
,您可以随时仔细检查代码:app_context
和 test_request_context
.此外,here's一篇讨论 Flask 上下文的文章。
这是很多链接,所以要分解一下:
我们可以看到app_context
创建了一个新的application 上下文,而test_request_context
创建了一个新的request 上下文。应用程序上下文在 two situations 中创建:手动使用 app_context
并在创建请求上下文时使用 test_request_context
或 at the beginning of the request 创建请求上下文.
所以当 request comes into your application ,一个RequestContext被创建。该对象的创建创建了一个应用程序上下文。
为什么要test_request_context
?在请求创建的上下文之外工作时,您需要该上下文 来访问应用程序,例如 proxies你可能认识,比如current_app
, request
, g
, 和 session
.深入代码,当您使用 test_request_context
而不是 request_context
创建 RequestContext 时,你会得到一个 EnvironBuilder
object .
关于python - flask 测试 : Test App Request?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31059310/