Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 任务队列在视图中工作,但在单元测试中运行时未知QueueError_Python_Unit Testing_Google App Engine - Fatal编程技术网

Python 任务队列在视图中工作,但在单元测试中运行时未知QueueError

Python 任务队列在视图中工作,但在单元测试中运行时未知QueueError,python,unit-testing,google-app-engine,Python,Unit Testing,Google App Engine,更新:最初我没有意识到这只会在从单元测试运行时失败 我用Python在AppEngine中有一个工作任务队列。 -手动调用视图时,任务将添加到队列并运行 -从单元测试调用时,将任务添加到队列失败,出现UnknownQueueError 在阅读有关遇到此问题的其他人的文章时,有人建议覆盖taskqueue\u stub,以解决此问题。但我不确定该怎么做或者为什么。编辑:工作答案。我的问题是在单个单元测试中添加存根修复:将其移动到setUp()修复 在tests.py中 from google.ap

更新:最初我没有意识到这只会在从单元测试运行时失败

我用Python在AppEngine中有一个工作任务队列。 -手动调用视图时,任务将添加到队列并运行 -从单元测试调用时,将任务添加到队列失败,出现UnknownQueueError


在阅读有关遇到此问题的其他人的文章时,有人建议覆盖
taskqueue\u stub
,以解决此问题。但我不确定该怎么做或者为什么。

编辑:工作答案。我的问题是在单个单元测试中添加存根修复:将其移动到setUp()修复

在tests.py中

from google.appengine.api import apiproxy_stub_map
import os

class BlahTest(MyAppTestCase)
    def setUp(self):
        '''Ensure dev appserver task queue knows where to find queue.yaml'''
        taskqueue_stub = apiproxy_stub_map.apiproxy.GetStub( 'taskqueue' ) 
        dircontainingqueuedotyaml = os.path.dirname(os.path.dirname( __file__ ))
        taskqueue_stub._root_path = dircontainingqueuedotyaml

现在可以了。

您链接到的页面顶部有一个解决方案。你试过了吗?是的,这就是我链接到这里的原因,但是它没有显示任何实际使用他创建的taskqueue_存根变量的内容。与完整版本相比,它也没有说明要删除哪些内容。存根是SDK内部管道的一部分。您只需修改现有的配置文件,告诉它在哪里可以找到配置文件。它是存根,因为它实现了生产任务队列服务的本地模拟。嗨,尼克,谢谢你的帮助。我已经在下面发布了我认为是代码完整版本的非工作答案。正在设置taskqueue_存根。_root_路径作为字符串指向包含queue.yaml的目录,但它根本不起作用。使用Google App Engine Testbed的更简单更干净的版本:
self.Testbed.init_taskqueue_存根(root_路径=dircontainingQueuedotyml)
我强烈建议不要使用_root_path,因为这是一个受保护的属性。使用root_path对我有效,没有它就无法工作。:)taskqueue存根似乎需要
根路径
,才能找到
队列.yaml
文件。下面是docstring中的一个片段:
root\u path:指向可能包含queue.yaml文件的应用程序目录的根路径。如果没有,则假定没有可用的queue.yaml文件。