《Python Web 开发-测试驱动开发》读书笔记(8)

16 篇文章 0 订阅

    7.1

    坑9:最后修改功能测试时输入'testing\n',但其实inputbox并没有声明,而是直接使用了。声明inputbox后发现测试仍然能通过,因为\n实际上并没有触发输入框的POST请求事件,页面也没有刷新。

        inputbox = self.browser.find_element_by_id('id_new_item')
        inputbox.send_keys('testing')
        inputbox.send_keys(Keys.ENTER)
        inputbox = self.browser.find_element_by_id('id_new_item')

    解决起来很简单,如上图1行加入inputbox变量的声明,3行模拟回车操作即可。这样页面刷新,功能测试也就没法通过了。

 

    7.5

    坑10:这里在加载CSS后需要直接在本地跑服务器看情况,可是进去后输入item的时候会报错:lists_item.list_id does not EXIST.

    这个问题的原因说明在迁移的时候没有把这个表的新的列建好,于是我尝试了python3 manage.py makemigrations,但是现实no changes detectd,说明迁移文件都已经就绪了。

    接下来输入python3 manage.py migrate,出现了另一个提示叫NOT NULL constraint failed: lists_item.list_id。这个说明在建数据表的时候有问题,用python3 manage.py showmigrations查了一下原来0004的迁移文件失败了。

    于是再输入python3 manage.py sqlmigrate lists 0004查看SQL,一看就不对劲了

BEGIN;
--
-- Add field list to item
--
ALTER TABLE "lists_item" RENAME TO "lists_item__old";
CREATE TABLE "lists_item" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "list_id" integer NOT NULL REFERENCES "lists_list" ("id") DEFERRABLE INITIALLY DEFERRED, "text" text NOT NULL);
INSERT INTO "lists_item" ("list_id", "text", "id") SELECT NULL, "text", "id" FROM "lists_item__old";
DROP TABLE "lists_item__old";
CREATE INDEX "lists_item_list_id_e742b95b" ON "lists_item" ("list_id");
COMMIT;

    中间插入的时候不知道为何是 SELECT NULL, "text", "id",这样肯定是不符合外键非空的规范的。

 

    为了找到终极问题,我用python3 manage.py sqlshell进去数据库看了一下,发现lists_item表是有数据的       

1|Buy peacock feathers

2|Use peacock feathers to make a fly

    这就是问题了,新增list列作为外键的时候因为没有既有的list,所以插入了一个空值导致了错误。

    找到问题后,我直接把这两个表lists_item和lists_list删掉了,再重新创建数据库就好了。

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值