Định nghĩa các test cases cho posts liệt kê
Định nghĩa các test cases cho các posts liệt kê là tương tự tạo posts. Tuy nhiên, bây giờ chúng ta cần tạo một state
ban đầu nơi chúng ta đã có một vài posts trong CSDL để có thể test các hàm liệt kê. Chúng ta có thể làm cái này
bằng cách sử dụng hàm beforeEach(), cái thực thi một vài code trước khi mỗi test case được thực thi. Chúng ta có
thể sử dụng hàm beforeEach() cho toàn bộ một test file hay chỉ chạy nó cho mỗi test bên trong một nhóm describe().
Trong trường hợp của chúng ta, chúng ta sẽ định nghĩa nó cho toàn bộ file, khi các posts mẫu sẵn sàng hoạt động
khi chúng ta test hàm xóa post sau này:
1. Biên tập src/__tests__/posts.js file, điều chỉnh phát biểu import để nhập khẩu hàm beforeEach từ @jest/globals
và nhập khẩu các hàm khác nhau để liệt kê posts từ các dịch vụ của chúng ta:
import { describe, expect, test, beforeEach } from ‘@jest/
globals’
import { createPost,listAllPosts,
listPostsByAuthor,
listPostsByTag,} from ‘../services/posts.js’
2. Tại cuối file, định nghĩa một mảng các posts mẫu:
3. Bây giờ định nghĩa một mảng rỗng, cái sẽ định cư với các posts được tạo. Sau đó, định nghĩa một hàm beforeEach
, cái trước tiên làm sạch tất cả các posts từ CSDL và làm sạch mảng các posts mẫu được tạo và sau đó tạo các posts
mẫu trong CSDL một lần nữa cho mỗi posts định nghĩa trong mảng trước kia. Cái này đảm bảo rằng chúng ta có một
trạng thái ổn định của CSDL trước khi mỗi test case chạy và rằng chúng ta có một mảng để so sánh với khi test các
hàm liệt kê post:
let createdSamplePosts = []
beforeEach(async () => {await Post.deleteMany({})
createdSamplePosts = []
for (const post of samplePosts) {const createdPost = new Post(post)
createdSamplePosts.push(await createdPost.save())}
})
Để đảm bảo rằng các unit tests của chúng ta là module và độc lập với nhau, chúng ta điền các posts vào CSDL trực
tiếp bằng cách sử dụng các hàm Mongoose (thay vì hàm createPost).
4. Bây giờ rằng chúng ta có một vài posts mẫu sẵn sàng, hãy viết test case đầu tiên của chúng ta, cái nên đơn giản
liệt kê tất cả các posts. Chúng ta sẽ định nghĩa một nhóm test mới cho kiệt kê các posts và một test để thẩm định
rằng tất cả posts mẫu được liệt kê bởi hàm listAllPosts():
describe(‘listing posts’, () => {
test(‘should return all posts’, async () => {
const posts = await listAllPosts()
expect(posts.length).toEqual(createdSamplePosts.length)})
5. Tiếp theo, làm một test cái thẩm định rằng trật tự xắp sếp mặc định thể hiện các posts mới nhất trước tiên.
Chúng ta sắp xếp mảng createdSamplePosts thủ công theo createdAt (hạ dần) và sau đó so sánh các dates sắp xếp
với những cái trả về từ hàm listAllPosts():
Chú ý hàm .map() áp dụng một hàm tới mỗi phần tử của một mảng và trả vê kết quả. Trong trường hợp của chúng
ta, chúng ta chọn đặc tính createdAt từ tất cả các phần tử của mảng. Chúng ta không thể trực tiếp so sánh các
mảng với cái khác vì Mongoose trả về các tài liệu với nhiều thông tin thêm trong metadata ẩn, cái Jest sẽ thử
so sánh.


