如何使用测试数据库响应django.test.Client

时间:2017-07-11 12:01:52

标签: python mysql django django-1.9

我有一个带有一个配置数据库的django settings.py文件,导致两个mysql数据库,我们称之为dbnametest_dbname

运行python manage.py test ...之类的命令时,会选择像

这样的对象
MyClass.objects.all()
到目前为止,

将从test_dbname中选择对象。

另一方面,如果我使用

测试html页面的生成
client = django.test.Client()
response = client.post(...)

然后创建client对象的测试代码(或者我不确定)和post参数使用test_dbname,而为{{1}提供服务的线程请求并生成响应使用post(没有test_ prepended)。

这是一个不便之处,因为:

  1. 如果此类请求应取决于服务器线程的数据库,则我的测试代码无法正确制定请求(即发布数据),从而导致How to test a Django form with a ModelChoiceField using test client and post method
  2. 等问题
  3. 现在有两个正在测试的数据库,而其中只有一个的内容似乎可以从我的测试代码中控制,这使得测试无法预测。
  4. 我可以让服务器线程使用我可以从测试用例线程控制的数据库吗?

1 个答案:

答案 0 :(得分:0)

感谢knbk解决了这个问题的答案:答案是在单元测试开始之前不应该运行任何查询。在我的情况下,这意味着替换像

这样的表单定义
var result = peopleDataBase.orderByChild("mCalculateFaceSizeWidth")
                    .startAt(mCalculateFaceSizeWidth())
                    .limitToFirst(1)
                    .on("value").then(function(snapshot) {

                         //This forEach brings at most one node
                         snapshot.forEach(snapshotChild){

                           var person = {
                               "name":snapshotChild.val().name,
                               "age":snapshotChild.val().age,
                               "id":snapshotChild.val().id,
                               "children":snapshotChild.val().children,
                               "address":snapshotChild.val().address,
                               "image":snapshotChild.val().image
                            }

                            if(key != snapshotChild.key){
                                people += person;
                                key = snapshotChild.key;
                            }
                         }
                         return people;
                       });

在导入文件时运行class MyForm(forms.Form): my_field = forms.ChoiceField(choices=<somequery>) ,即在测试用例运行之前,运行:

somequery