Udacity - 烧瓶 Python

Udacity - Flask Python

我一直在研究关于单元测试烧瓶应用程序的 Udacity 课程。

所有需要的文件都在我试图修复的这个 Github link, and we will just focus on the "backend" directory. This directory contains the flaskr directory and two files - one of which is the test_flaskr.py, where there is this test_delete_book 方法中。

当前 test_delete_book 测试方法的编码方式只会通过第一个测试(并且在后续测试中会失败)。所以我想做的是获取最后一本书条目的 'id' 键的值,并将其传递给 delete book API 。在同一个测试文件 test_flaskr.py 中还有另一个 test_create_new_book 方法确保 Book table 永远不会 运行 数据不足(因此 test_delete_book 永远不会失败我的代码更改。

顺便说一下,这里是 link 到 Book table 结构。

这是我的 test_delete_book 代码(强调只有两行 - 第 03 行和第 04 行):

01    # Delete a different book in each attempt
02    def test_delete_book(self):
03        book = Book.query.order_by(Book.id.desc()).first()
04        book_id_to_delete = book.id
05        # res = self.client().delete('/books/<book_id_to_delete')
06        res = self.client().delete('/books/' + str(book_id_to_delete))
07        data = json.loads(res.data)
80
09        book = Book.query.filter(Book.id == book_id_to_delete).one_or_none()
10
11        self.assertEqual(res.status_code, 200)
12        self.assertEqual(data['success'], True)
13        self.assertEqual(data['deleted'], book_id_to_delete)
14        self.assertTrue(data['total_books'])
15        self.assertTrue(len(data['books']))
16        self.assertEqual(book, None)

在第 03 行,我编写了 SQLAlchemy 查询代码以获取最后一本书 table 条目的 book.id 值,并将最后一本书 ID 值保存在 book_id_to_delete 变量中。顺便说一句,这个测试实际上与数据库接口(不是模拟的)。在我 运行 测试之前,我记下了最后一本书 table 条目的“id”键。当我运行测试时,所有测试都通过了,但最后的table条目仍然在table.另外,我没有看到应该由我之前提到的 test_create_new_book 方法创建的新记录。

这是奇怪的地方(至少对我而言):

当我通过将“book.id”替换为图书中最后一个条目的实际图书 ID 值来修改第 04 行时 table 然后 运行 测试,不仅最后一个条目是否已从图书 table 中删除,但我还可以看到由 test_create_new_book 方法创建的新图书 table 记录。

非常感谢任何有用的输入。

我终于能够调试单元测试了,而且我能够看到一条记录实际上正在被删除。我的单元测试包括一个创建记录的测试用例,我的删除测试用例获取最后一条记录(由我的“创建测试用例”添加)并成功删除它。

Python-明智的,下面一行

res = self.client().delete('/books/' + str(book_id_to_delete)

应替换为:

res = self.client().delete('/books/{}'.format(str(book_id_to_delete)))