Jest: วิธีทดสอบคีย์ออบเจ็กต์และคุณสมบัติ


95

ฉันมีmapModuleที่ที่ฉันนำเข้าส่วนประกอบและส่งออก:

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

export default {
  name: ComponentName,
};

ฉันจะทดสอบได้อย่างไรว่าmapModuleมีคีย์ค่าที่ส่งออกที่ถูกต้องและไม่เป็นโมฆะหรือไม่ได้กำหนดไว้

คำตอบ:


130

ในเวอร์ชัน 23.3.0 ของ jest

expect(string).toMatch(string) 

คาดว่าจะมีสตริง

ใช้:

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

ผลคือผ่านการทดสอบ


101

คุณสามารถใช้อย่างใดอย่างหนึ่ง:

toEqual และ toMatchObject เป็นตัวจับคู่แม่แบบสำหรับวัตถุ:

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

หรือใช้ toHaveProperty ได้อย่างง่ายดาย:

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

24
คำตอบนี้ไม่ถูกต้องอีกต่อไป toMatchควรเป็นไปtoMatchObjectตามที่ระบุโดย @ user3605834
Kristoffer Dorph

1
ได้รับการปรับปรุงตามความคิดเห็นของ
@KristofferDorph

8

โปรดทราบว่าการ.toMatchObjectตรวจสอบ "ว่าออบเจ็กต์ JavaScript ตรงกับส่วนย่อยของคุณสมบัติของอ็อบเจ็กต์" ดังนั้นจึงสามารถมีการยืนยันโดยไม่ได้ตั้งใจเช่นนี้:

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

หากคุณต้องการจับคู่วัตถุทั้งหมดคุณควรใช้.toStrictEqualตั้งแต่jest 23:

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

อันที่จริงนั่นคือการยืนยันว่า MatchObject ถูกออกแบบมาสำหรับ คุณสามารถใช้ toEqual ได้หากคุณไม่ต้องการพฤติกรรมนั้น ...
Dan

0

สำหรับคีย์เดียวคุณสามารถตรวจสอบได้

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

สำหรับหลาย ๆ คีย์ (ซึ่งต้องมีทั้งหมด) คุณสามารถใช้ได้

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

สำหรับหลายคีย์ (โดยที่ต้องมีอันใดอันหนึ่ง) คุณสามารถใช้ได้

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.