首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >django-nose单元测试芹菜任务...缺少数据库数据

django-nose单元测试芹菜任务...缺少数据库数据
EN

Stack Overflow用户
提问于 2012-06-09 04:08:03
回答 1查看 804关注 0票数 3

我正在使用django-nose为芹菜任务编写单元测试。这是相当典型的;一个空白的测试数据库(REUSE_DB=0),它在测试时通过一个fixture预先填充。

我遇到的问题是,即使TestCase正在加载fixture,并且我可以从测试方法访问对象,在异步芹菜任务中执行时,同样的查询也会失败。

我已经检查了测试方法和测试任务中的默认“settings.DATABASES”是否相同。我还验证了正在测试的任务在作为常规方法调用调用时行为是否正确。

这就是我没有想法的地方。

下面是一个示例:

代码语言:javascript
复制
class MyTest(TestCase):
    fixtures = ['test_data.json']

    def setUp(self):
        settings.CELERY_ALWAYS_EAGER = True # seems to be required; if not I get socket errors for Rabbit
        settings.CELERY_EAGER_PROPAGATES_EXCEPTIONS = True # exposes errors in the code under test.

    def test_city(self):
        self.assertIsNotNone(City.objects.get(name='brisbane'))
        myTask.delay(city_name='brisbane').get()
        # The following works fine: myTask('brisbane')

from celery.task import task

@task()
def myTask(city_name):
    c = City.objects.count() # gives 0
    my_city = City.objects.get(name=city_name) # raises DoesNotExist exception
    return
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-09 04:20:49

这听起来很像django-celery2.5中的一个bug,它在2.5.2:https://github.com/celery/django-celery/pull/116中得到了修复

对该bug的简要描述是,django-celery加载程序在执行任务之前关闭了DB连接,甚至是急切的任务。因为测试在事务中运行,所以用于任务执行的新连接看不到在setUp中创建的数据。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10955452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档