【问题标题】:Django test not loading fixture dataDjango测试不加载夹具数据
【发布时间】:2011-06-07 00:05:02
【问题描述】:

我已经为我正在处理的一个 Django 项目编写了测试,但是一个特定的夹具无法加载。 夹具是使用转储数据生成的,我根本没有摆弄它。 我可以在该夹具上使用 manage.py 加载数据而不会出错。我已经验证了使用 shell 实际加载的数据并查询数据。 这让我发疯,任何帮助将不胜感激。

这是我的测试文件(不相关部分已删除):

class ViewsFromUrls(TestCase):
    fixtures = [
        'centers/fixtures/test_data.json',
        'intranet/fixtures/test_data.json',
        'training/fixtures/test_data.json', #The one that fails to load
        ]

    def setUp(self):
        self.c = Client()
        self.c.login(username='USER', password='PASS')

    ...

    def test_ViewBatch(self):
        b = Batch.objects.all()[0].ticket_number
        response = self.c.get(reverse('training.views.view_batch', kwargs={'id':b}))
        self.assertTrue(response.status_code, 200)
    ...

【问题讨论】:

  • 您是否尝试过仅加载单个有问题的夹具?您是否尝试过更改它们在灯具列表中的顺序?我敢打赌,这与两个独立装置中的数据冲突有关
  • 尝试使用灯具的绝对路径,即 /home/user/...
  • 问题是它们都具有相同的名称,它们在不同的应用程序文件夹中并不重要,请参阅我的答案。

标签: django django-views


【解决方案1】:

检查灯具是否真的在正确的位置。来自docs

Django 将在三个位置进行搜索 对于固定装置:

  1. 在每个已安装应用程序的 fixtures 目录中
  2. 在以 FIXTURE_DIRS 设置命名的任何目录中
  3. 在fixture命名的文字路径中

【讨论】:

  • 如果他没有回答你的问题,你为什么要标记答案?
【解决方案2】:

django.test导入TestCase:

from django.test import TestCase

class test_something(TestCase):
    fixtures = ['one.json', 'two.json']
    ...
  • 不是:import unittest
  • 不是:import django.utils.unittest
  • 但是:import django.test

那是令人沮丧的一天。 停止抱怨 - it's in the docs :-/

【讨论】:

  • 嘿,在同一个页面(在顶部),他们特别告诉你“从 django.utils import unittest” :-( 通常 Django 文档比这要好得多......谢谢不过,对于答案,它完全帮助了我。
  • “停止抱怨”的签署是自我指导的,旨在作为某种神秘的最后齐射,针对那些用“好吧,这一切都写在文档中,所以唯一应该责备的人”来证明令人沮丧的设计的人因为困难在于你自己。”不要在一些知道答案的自大狂的背景下阅读它,而是像你这样的普通人花了非常令人沮丧的一天来找出答案。
【解决方案3】:

有一点需要注意,在您的设置文件中创建 FIXTURE_DIRS 常量时,如果您的项目根目录中有一个通用的固定装置目录,请务必省略前导“/”。

例如:
'/actual/path/to/my/app/fixtures/'

现在,在 settings.py 文件中:
不会工作:
FIXTURE_DIRS = '/fixtures/'

将起作用:
FIXTURE_DIRS = '夹具/'

这可能取决于您的其他路线的配置方式,但这是一个让我摸不着头脑的问题。希望这是有用的。干杯。

【讨论】:

    【解决方案4】:

    我不确定这是否能解决您的问题,但在这个网站上:

    https://code.djangoproject.com/wiki/Fixtures

    我发现了一个有趣的评论:

    你看到 Django 搜索 appnames/fixtures 和 settings.FIXTURE_DIRS 并加载第一个匹配项。所以如果你使用名字 像你的灯具的 testdata.json 你必须确保没有其他 活动应用程序使用同名的夹具。如果没有,你可以 永远不要确定你实际加载了哪些灯具。因此它是 建议你在你的装置前加上应用程序名称, 例如myapp/fixtures/myapp_testdata.json .

    应用这个(在文件名中使用 appname 作为前缀重命名灯具),解决了我的问题(我遇到了与这里描述的相同的问题)

    【讨论】:

      猜你喜欢
      • 2018-02-07
      • 2011-01-12
      • 2011-03-10
      • 1970-01-01
      • 2013-10-24
      • 2015-01-01
      • 2011-04-16
      • 2018-02-03
      • 2013-08-24
      相关资源
      最近更新 更多