2009-10-28 46 views
2

我关闭了Django主干,注意到主干中Django模块的单元测试总是失败。 Django主干应该通过它所有的单元测试吗?如果Django的中继单元测试失败会怎么办?

下面是一些例子错误:

 
====================================================================== 
ERROR: test_password_change_fails_with_invalid_old_password (django.contrib.auth.tests.views.ChangePasswordTest) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "/Users/michael/django/trunk/django/contrib/auth/tests/views.py", line 156, in test_password_change_fails_with_invalid_old_password 
    'new_password2': 'password1', 
    File "/Users/michael/django/trunk/django/test/client.py", line 318, in post 
    response = self.request(**r) 
    File "/Users/michael/django/trunk/django/core/handlers/base.py", line 87, in get_response 
    response = middleware_method(request, callback, callback_args, callback_kwargs) 
    File "/Users/michael/Documents/workspace/drchrono/drchrono_middleware/drchrono.py", line 31, in process_view 
    setattr(request, 'currentDoctor', request.user.get_profile().doctor) #Default is to have currentDoctor be default for logged in user. 
    File "/Users/michael/django/trunk/django/contrib/auth/models.py", line 285, in get_profile 
    self._profile_cache = model._default_manager.get(user__id__exact=self.id) 
    File "/Users/michael/django/trunk/django/db/models/manager.py", line 119, in get 
    return self.get_query_set().get(*args, **kwargs) 
    File "/Users/michael/django/trunk/django/db/models/query.py", line 298, in get 
    % self.model._meta.object_name) 
DoesNotExist: UserProfile matching query does not exist. 

我才意识到,很多错误的提缺少用户配置,并且我有我创建通过新用户时创建一个自定义用户配置对象Web注册过程(但是在管理员中实例化一个新的User对象时并未创建,或者我将通过代码假设)。所以,也许这是我的应用程序的错误,因为未为通过GUI创建的用户创建UserProfiles。我如何为每个创建的用户对象创建一个UserProfile?你是否用monkeypatch User类的new()方法?

回答

3

干线应该通过所有的测试。如果你有一致的失败,或许你的环境在某种程度上是不寻常的。如果不同的测试在不同的时间失败,你可能只是在观察典型的主干扰动。

django-developers list对这样的东西非常敏感。如果你专业地问(例如,不是“帅哥,你的代码sux!它甚至不通过它自己的测试!!”),他们会帮助你找出问题所在。

+0

我认为这可能是由于我的开发设置。我使用的是OSX和MySQL,大多数失败似乎是重命名表等数据库相关的。 – MikeN 2009-10-28 15:47:46

+0

OSX和MySQL都完全支持,所以还是值得一问。我确信Django团队会更喜欢你可以自信地运行测试。 – 2009-10-28 17:37:43

2

数星期前在开发人员名单中注意到(请参阅this thread),开箱即用的Django未通过其所有测试。然而,这是因为缺乏特定的模板,而不是数据库表。有没有什么铃声响起?

+0

这不是开箱即用的应用程序,而是一个正在运行的应用程序。 – MikeN 2009-10-29 00:22:56

0

我使用的是django 1.2.3(一个稳定版本,而不是主干)。当我创建一个空应用程序并运行./manage.py test时,我得到三个测试失败,其中之一是上面指出的一个。但在我的情况下,该错误与缺少的模板有关:TemplateDoesNotExist: registration/password_change_form.html。这就是为什么我认为(像丹尼尔)这是缺少模板的问题。

+1

我在这里找到了解释http://www.mail-archive.com/[email protected]/msg78059.html – 2010-11-01 08:34:10