在Google App Engine中对Django模板进行单元测试会引发TemplateDoesNotExist(名称)

时间:2012-07-18 20:33:03

标签: python django unit-testing google-app-engine webapp2

我正在尝试使用python unittest框架在Google App Engine中设置一系列Django模板的单元测试。

该应用程序使用python 2.7,webapp2,Django 1.2,并且已经使用unittest来测试无Django功能。 Django模板在开发和实时环境中通过服务器提供服务没有问题。

通过unittest框架执行页面调用时,会引发以下错误:

  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/django_1_2/django/template/loader.py", line 138, in find_template
  raise TemplateDoesNotExist(name)
  TemplateDoesNotExist: site/index.html

Settings.py:

import os

PROJECT_ROOT = os.path.dirname(__file__)

TEMPLATE_DIRS = (
    os.path.join(PROJECT_ROOT, "templates"),
)

单元测试电话:

import webapp2
import unittest
import os

os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'

from google.appengine.dist import use_library
use_library('django', '1.2')

import main

class test_main(unittest.TestCase):

    def test_default_page(self):

        request = webapp2.Request.blank('/')

        response = request.get_response(main.app)

        self.assertEqual(response.status_int, 200)

我发现有必要在测试文件中指定DJANGO_SETTINGS_MODULE和Django版本,即使这些版本通常是通过app.yaml指定的

页面处理程序:

from django.template.loaders.filesystem import Loader
from django.template.loader import render_to_string

class default(webapp2.RequestHandler):

    def get(self):

        self.response.out.write(render_to_string('site/index.html'))

我尝试从index.html中删除所有内容,但仍然会遇到同样的错误。

我尝试过使用TEMPLATE_DIRS的显式路径但没有变化。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

检查是否在django配置中的任何位置设置了这个:

TEMPLATE_LOADERS=('django.template.loaders.filesystem.load_template_source',)