在Django上测试应用程序时没有找到任何装置

时间:2011-05-17 07:02:59

标签: django unit-testing testing fixtures

我终于决定为我的所有代码创建单元测试。那就是我正在尝试根据我的模型创建灯具来测试我的功能。

我使用dumpdata命令创建了一个json fixture,并将它放在我的app上的fixtures目录下。以下是我测试的代码:

import unittest
from mysite.myapp.models import Post

class RatingTestCase(unittest.TestCase):
  fixtures = [
      'posts.json',
  ]

def test_me(self):
  p = Post.objects.all()
  self.assertTrue(p)

我在Arch Linux机器上使用以下命令运行我的测试:

python2.7 manage.py test myapp

它创建一个sqlite数据库并安装所有表和indeces,但最后它说没有找到夹具,它说我的测试失败,因为它没有找到任何数据。

我正在运行Django开发版的最新版本,并注意到根据文档,我应该使用以下方法导入unittest:

from django.utils import unittest

然而,当我这样做时,它抱怨无法导入unittest。这就是我导入的原因 unittest直接来自我的python路径。

我之前尝试过模拟django模型对象,但我认为使用fixture来测试Django应用比使用mock库更好。知道如何加载灯具吗?

提前致谢。

编辑:如果我将我的灯具名称更改为initial_data.json,它将在每次运行测试时加载它。但是,我仍然需要有多个灯具名称来运行不同的测试。

编辑:我通过以下方式导入TestCase来实现它:

from django.test import TestCase

5 个答案:

答案 0 :(得分:5)

有几件事可能会有所帮助:

  1. 您可以使用--verbosity = 2运行测试,以查看django查找灯具的目录。
  2. django TestCase是django建议使用的,与unittest相反。
  3. 您的灯具目录/文件位于何处?如果它不在你的应用程序中,你必须在设置文件中指定一个fixture目录。

答案 1 :(得分:0)

您是否检查过灯具所在的路径是否可用:

settings.FIXTURE_DIRS = ('/path/to/proj_folder/fixtures/',)

答案 2 :(得分:0)

我有名字问题。即使我将文件放在app文件夹下的fixture目录中,下面的代码也行不通。

  

fixtures = ['initial_data2.json']

然后我将import语句更改为刚刚工作的下面的语句。

  

来自django.test import TestCase

答案 3 :(得分:0)

我遇到了同样的问题,而且它对我起作用的原因是我的初始数据文件没有扩展名。

我做了:

manage.py dumpdata > initial_data
manage.py loaddata initial_data

哪个不起作用,因为在initial_data上没有扩展名,但是,这确实有效:

mv initial_data initial_data.json 
manage.py loaddata --verbosity=2 initial_data.json 

答案 4 :(得分:-1)

只是为了确认TestCase的import语句,它会破坏查找任何灯具 但是在所有其他方面都可以工作,所以不会抛出任何错误,因为它尝试没有夹具加载

from django.utils.unittest import TestCase

...不要使用它......如建议使用

from django.test import TestCase