中秋夜來練習常用的 Jest Matcher:
toBe()
===
)const a = 100;
const b = 100;
const c = "100";
expect(b).toBe(a); // PASS 因為兩者 Value 相等
expect(c).toBe(a); // FAIL 因為兩者 型別不一致
但要特別注意,當使用 toBe()
進行物件比較時:
const a = {name: "Joanna"};
const b = {name: "Joanna"};
const c = a;
expect(b).toBe(a); // FAIL,因為兩者 Values not by same reference.
expect(c).toBe(a); // PASS,因為兩者 Values by same reference.
toEqual()
const a = {name: "Joanna"};
const b = {name: "Joanna"};
const c = a;
expect(b).toEqual(a); // PASS,因為兩者 擁有相同屬性與屬性值(Compared By Value)
expect(c).toEqual(a); // PASS,因為兩者 擁有相同屬性與屬性值 (With same Reference)
const obj1 = {
level1: {
level2: {
level3: 'value'
}
}
};
const obj2 = {
level1: {
level2: {
level3: 'value'
}
}
};
expect(obj1).toEqual(obj2); // PASS,因為兩者 每一層的 屬性 與 屬性值 皆相同。
const string = "I have a dream.";
expect(string).toMatch(/dream/); // 斷言想判斷字串中是否「有」包含 dream 一詞
expect(string).not.toMatch(/dream/); // 斷言想判斷字串中是否「沒有」包含 dream 一詞
在寫 JavaScript if-else 判斷式中,Null
, undefined
, false
都會判定為 falsy 值。
但有些情況我們會想要清楚判斷值為 Null, undefined, false 時,可以使用:
toBeNull
: 只有符合 Null 條件時成立。toBeUnDefined
: 只有符合 undefined 條件時成立。toBeDefined
: 只有「不」符合 undefined 條件時成立。(Null 是成立的)toBeTruthy
: if-else 符合 Truthy statement。toBeFalsy
: if-else 符合 Falsy statement。expect(Null).toBeNull(); // PASS
expect(undefined).toBeNull(); // FAIL
expect(0).toBeNull(); // FAIL
expect(Null).toBeUnDefined(); // FAIL
expect(undefined).toBeUnDefined(); // PASS
expect(0).toBeUnDefined(); // FAIL
expect(Null).toBeDefined(); // PASS
expect(undefined).toBeDefined(); // FAIL
expect(0).toBeDefined(); // PASS
expect(Null).toBeTruthy(); // FAIL
expect(undefined).toBeTruthy(); // FAIL
expect(0).toBeTruthy(); // FAIL
expect(Null).toBeFalsy(); // PASS
expect(undefined).toBeFalsy(); // PASS
expect(0).toBeFalsy(); // PASS
測試數字滿足某個條件時,可以使用:
.toBeGreaterThan(10);
.toBeGreaterThanOrEqual(10);
.toBeLessThan(10);
.toBeLessThanOrEqual(10);
const value = 0.1 + 0.2;
expect(value).toBe(0.3); // FAIL,JavaScript 二進位轉十進位無法整除
expect(value).toBeCloseTo(0.3); // PASS,接近可以成立