Jest: Cách kiểm tra các thuộc tính và khóa đối tượng


85

Tôi có một mapModulenơi tôi nhập các thành phần và xuất chúng:

import ComponentName from '../components/ComponentName';

export default {
  name: ComponentName,
};

Làm cách nào để kiểm tra xem nó mapModulecó các khóa, giá trị được xuất chính xác và chúng không rỗng hoặc không xác định hay không?

Câu trả lời:


118

Trong phiên bản 23.3.0 của jest,

expect(string).toMatch(string) 

mong đợi một chuỗi.

Sử dụng:

const expected = { name:'component name' }
const actual = { name: 'component name', type: 'form' }
expect(actual).toMatchObject(expected)

kết quả là vượt qua bài kiểm tra


97

bạn có thể sử dụng một trong những:

toEqual và toMatchObject là các trình đối sánh mẫu cho các đối tượng:

let Obj = {name: 'component name', id: 2};
expect(oneObj).toEqual({name: 'component name'}) // false, should be exactly equal all Obj keys and values  
expect(oneObj).toMatchObject({name: 'component name'}) // true

hoặc dễ dàng sử dụng toHaveProperty:

let Obj = {name: 'component name'};
expect(oneObj).toHaveProperty('name') // true
expect(oneObj).toHaveProperty('name', 'component name') // true

24
Câu trả lời này không còn đúng nữa. toMatchNên toMatchObjecttheo quy định của @ user3605834
Kristoffer Dorph

1
Nó đã được cập nhật theo nhận xét của @KristofferDorph
Despertaweb

7

Hãy nhớ rằng .toMatchObjectkiểm tra "một đối tượng JavaScript có khớp với một tập hợp con các thuộc tính của một đối tượng hay không." Vì vậy, nó có thể có các khẳng định ngoài ý muốn như:

expect({ a: 1, b: 2 }).toMatchObject({ a: 1 }); // pass

Nếu bạn muốn đối sánh chính xác một đối tượng, bạn nên sử dụng .toStrictEqual, có sẵn vì jest 23:

expect({ a: 1, b: 2 }).toStrictEqual({ a: 1 }); // fail

Trên thực tế, đó chính xác là khẳng định toMatchObject được thiết kế cho. Bạn có thể sử dụng toEqual nếu bạn không muốn hành vi đó ...
Dan

0

Đối với một chìa khóa duy nhất, bạn có thể kiểm tra

expect(Boolean(obj[prop])).toBe(true | false);

Đối với nhiều khóa (khi tất cả phải có mặt), bạn có thể sử dụng,

expect(Boolean(obj[prop1]) && Boolean(obj[prop2])).toBe(true | false);

Đối với nhiều khóa (khi bất kỳ khóa nào phải có), bạn có thể sử dụng

expect(Boolean(obj[prop1]) || Boolean(obj[prop2])).toBe(true | false);

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.