【问题标题】:django web app testingdjango web 应用程序测试
【发布时间】:2011-04-04 21:46:44
【问题描述】:


我在 tests.py 中有以下内容。

def setUp(self):
    self.client = Client()
    self.client.get('/homepage',{'join':'NPO2','siteid':1450})
    self.client.session.save()
    self.oraganisation_list = ['NPO1','NPO2','NPO3']
    self.pay_recursion_list = ['annual','monthly','bi-annual','quarter']
def test_paytermpage(self):
    for org in self.organisation_list:
        response = self.client.get('',{'join':org,'siteid':1450})
        self.failUnlessEqual(response.status_code,200)
        self.assertTemplateUsed(response,'some.html')
def test_infopage(self):
    for term in self.pay_recurstion_list:
        response = self.client.post('',{'pay-term':term,'submit':'payterm'})
        self.failUnlessEqual(response.status_code,200)

test_infopage() 失败,这是回溯。

Traceback (most recent call last):
  File "/var/lib/django/bsdata/shoppingcart/tests.py", line 50, in test_infopage
    response = self.client.post('',{'pay-term':term,'submit':'payterm'})
  File "/usr/lib/pymodules/python2.6/django/test/client.py", line 313, in post
    response = self.request(**r)
  File "/usr/lib/pymodules/python2.6/django/core/handlers/base.py", line 92, in get_response
    response = callback(request, *callback_args, **callback_kwargs)
  File "/var/lib/django/.../views.py", line 22, in start
    term,costdict,webobj = costInfo(request)
  File "/var/lib/django/...views.py", line 238, in getCostInfo
    cost_dict = Site.objects.getDict(request.session['siteid']) 
  File "/var/lib/django/.../managers.py", line 16, in getLoadedDict
    siteobj = Site.objects.get(pk=agent)
  File "/usr/lib/pymodules/python2.6/django/db/models/manager.py", line 120, in get
    return self.get_query_set().get(*args, **kwargs)
  File "/usr/lib/pymodules/python2.6/django/db/models/query.py", line 305, in get
    % self.model._meta.object_name)
DoesNotExist: Site matching query does not exist.

我确实进行了调试以查看 siteobj = Site.objects.get(pk=agent) 中的“代理”值是什么值。

令人惊讶的是,当像这样从 shell 测试时,它们都在工作

setup_test_environment()
client = Client()
client.get('/shoppingcart',{'join':'NPO1','siteid':1450})
client.session.save()
oraganisation_list = ['NPO1','NPO2','NPO3']
pay_recursion_list = ['annual','monthly','bi-annual','quarter']
for org in oraganisation_list:
    response = client.get('',{'join':org,'siteid':1450})
    TestCase.failUnlessEqual(t,response.status_code,200)
for term in pay_recursion_list:
    response = client.post('',{'pay-term':term,'submit':'payterm'})
    TestCase.failUnlessEqual(t,response.status_code,200)

抱歉信息太多,不知道如何更好地解释。 任何想法都会对这个新手非常有帮助。谢谢。

【问题讨论】:

    标签: django unit-testing testing views


    【解决方案1】:

    Django 测试运行程序使用的数据库与您的生产数据不同。如果您的站点需要一个站点存在,您应该将其添加到您的测试设置中,或者您应该需要一个加载站点的夹具。

    【讨论】:

    • 测试代码中的Site是指有代理网站详细信息的表格。我想知道为什么从 shell 工作时它没有给我错误:(
    • 因为 shell 在您的普通数据库中工作。编写测试时,您应该在 setUp 中提供运行测试所需的所有数据
    • Ahhhhhh....谢谢 Issac Kelly,在运行测试时,我看到了创建测试数据库和所有模型名称之类的东西。所以我认为它使用那些(那些 shell 正在使用)。我会挖掘文档以查看如何设置测试数据。但我非常感谢您的帮助
    【解决方案2】:

    尝试在您的设置中输入“SITE_ID = 1”。这是the sites framework 的一部分。

    【讨论】:

    • 感谢您的宝贵时间,我确实检查了,我的设置文件中确实有 site_id =1,还有其他可能出错的地方吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-26
    • 1970-01-01
    • 2010-09-21
    • 2012-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多