首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >django测试:如何启动可以访问测试数据库的后台进程?

django测试:如何启动可以访问测试数据库的后台进程?
EN

Stack Overflow用户
提问于 2015-08-18 19:57:11
回答 1查看 830关注 0票数 6

我试图使用django测试框架编写一个测试,这个测试生成了一个新的后台进程,可以访问测试数据库。测试是这样的,

temp_project/temp_app/tests.py

代码语言:javascript
复制
import subprocess
from django.test import TestCase                                                                                                                    
from temp_app.models import TempModel

# Create your tests here.                                                                                                                             

class TempTest(TestCase):

    def setUp(self):
        TempModel.objects.create()

    def test_main(self):

        self.assertEqual(str(TempModel.objects.all()) + '\n',
                     subprocess.check_output(['python', 'manage.py', 'temp_command']))

子进程只是打印出数据库temp_project/temp_app/management/commands/temp_command.py的内容。

代码语言:javascript
复制
from temp_app.models import TempModel
from django.core.management.base import BaseCommand

class Command(BaseCommand):

    def handle(self, *args, **kwargs):
        print TempModel.objects.all()

模型是一个空占位符,temp_project/temp_app/ model s.py

代码语言:javascript
复制
from django.db import models

# Create your models here.                                                                                                                            
class TempModel(models.Model):
    pass

但是,测试的输出看起来像,

代码语言:javascript
复制
> python manage.py test
Creating test database for alias 'default'...
F
======================================================================
FAIL: test_main (temp_app.tests.TempTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/dvoong/projects/opentrv/ors/source/temp/temp_project/temp_app/tests.py", line 15, in test_main
    subprocess.check_output(['python', 'manage.py', 'temp_command']))
AssertionError: '[<TempModel: TempModel object>]\n' != '[]\n'

----------------------------------------------------------------------
Ran 1 test in 0.285s

FAILED (failures=1)
Destroying test database for alias 'default'...

因此,子流程似乎是访问生产数据库而不是测试数据库。有什么想法吗?数据库设置是,默认值,

代码语言:javascript
复制
DATABASES = {
    'default': {
    'ENGINE': 'django.db.backends.sqlite3',
    'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}
EN

回答 1

Stack Overflow用户

发布于 2015-08-19 02:19:48

不使用测试数据库的子进程是预期的,因为您的子进程无论如何都没有运行测试命令。解决方案是创建一个新的设置文件,并使用--settings参数将其作为参数传递给您的子进程。当然,这个新的设置文件应该指向测试数据库。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32081544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档