1

我想在运行测试用例之前将测试数据插入数据库。

从 django 的详细输出来看,它说它已经从固定装置加载了很多对象。但是测试数据库中的表仍然是空的。我在我的测试代码中设置断点,然后检查测试数据库的表。我什至调试了 django 代码,它确实执行了插入 sql 并返回了受影响的行。但我仍然无法在测试数据库中找到数据!

数据库服务器是mysql。

有什么解决办法吗?

django 测试的详细输出

...
Loading 'goods_756399566_3my10' fixtures...
...
Trying '/Users/kane/git/blizzard_recommend/blizzard_recommend/src/web/fixtures' for goods_756399566_3my10.xml.zip fixture 'goods_756399566_3my10'...
No xml fixture 'goods_756399566_3my10' in '/Users/kane/git/blizzard_recommend/blizzard_recommend/src/web/fixtures'.
Trying '/Users/kane/git/blizzard_recommend/blizzard_recommend/src/web/fixtures' for goods_756399566_3my10.xml.bz2 fixture 'goods_756399566_3my10'...
No xml fixture 'goods_756399566_3my10' in '/Users/kane/git/blizzard_recommend/blizzard_recommend/src/web/fixtures'.
Trying '/Users/kane/git/blizzard_recommend/blizzard_recommend/src/web/fixtures' for goods_756399566_3my10.json fixture 'goods_756399566_3my10'...
Installing json fixture 'goods_756399566_3my10' from '/Users/kane/git/blizzard_recommend/blizzard_recommend/src/web/fixtures'.
Trying '/Users/kane/git/blizzard_recommend/blizzard_recommend/src/web/fixtures' for goods_756399566_3my10.json.gz fixture 'goods_756399566_3my10'...
No json fixture 'goods_756399566_3my10' in '/Users/kane/git/blizzard_recommend/blizzard_recommend/src/web/fixtures'.
Trying '/Users/kane/git/blizzard_recommend/blizzard_recommend/src/web/fixtures' for goods_756399566_3my10.json.zip fixture 'goods_756399566_3my10'...
...
Installed 117 object(s) from 2 fixture(s)

更新

我尝试转储与 initial_data.json 相同的数据,这个夹具中的数据可以插入到测试数据库中。我不知道为什么 django 在运行测试用例之前无法插入固定装置,但这是让我的工作继续进行的一种解决方法。

解决方法

我不确定这是我的环境造成的。无论如何我在做测试时将数据库更改为SQLLite,将夹具数据导入内存数据库没有问题。在没有安装 mysql 的情况下运行单元测试也很有意义。

4

1 回答 1

0

这已经很晚了,但是,我在研究自己的类似问题时发现了这个问题。答案是,每个 Django 测试都包含在一个事务中,所以如果你跳到其他程序来检查数据库,这就是你看不到它的原因。

这个问题指向相关文档:Django Rest Framework testing save POST request data

(可悲的是,这不是我自己问题的原因。)

于 2018-01-30T23:18:03.203 回答