JavaScript built-in test library 'assert'
Let's make the built-in assert easy to use!
1. console.assert π©βπ»
JavaScript λ₯Ό μ¬μ©νλ , TypeScript λ₯Ό μ¬μ©νλ ν
μ€νΈ μ½λλ₯Ό μμ±ν λ Jest
, Vitest
μ κ°μ μλνν° λΌμ΄λΈλ¬λ¦¬λ₯Ό
μ€μΉνκ³€ νλ€. λ¬Έμ λ μλνν°μ΄λ€λ³΄λ νλ‘μ νΈ μ€μ μ΄λ λ€λ₯Έ λΌμ΄λΈλ¬λ¦¬μ μ’
μμ±μ κ°μ Έ ν
μ€νΈ μ½λλ₯Ό λλ €λ³΄κΈ° μν΄ λΌμ΄λΈλ¬λ¦¬κ°
μ λμκ°λμ§ ν
μ€νΈλ₯Ό ν΄μΌνλ μμ΄λ¬λν μν©μ κ²ͺμ μ μ΄ μλ€.
μ€μ νλ‘μ νΈλ μλλ° ν μ΄ νλ‘μ νΈμμ μΌλΆ ν¨μλ₯Ό κ°λ³κ² ν μ€νΈ ν΄λ³΄κ³ μ ν λ μ΄λ° μν©μ΄ νΌμ³μ§λ©΄ λ°°λ³΄λ€ λ°°κΌ½μ΄ λ 컀μ§λ κ·Έλ° μν©μ μ§μ¦μ΄ λκ³€ νλ€.
κ·Έλμ λ¬Έλ κΆκΈνλ€.
Java λ₯Ό λΉλ‘―ν λλΆλΆμ μΈμ΄λ₯Ό μ¬μ©ν λ κΈ°λ³Έμ μΌλ‘ xUnit
μ΄ μμ΄ λ³λμ μ€μΉ μμ΄λ ν
μ€νΈκ° κ°λ₯νλ€. μλ²λ₯Ό κ°λ°νλ©°
νμ¬ μ½λμ ν
μ€νΈ μ½λκ° μ‘΄μ¬νμ§ μμ λμ
μ νμ λ μμ λ³λ€λ₯Έ μ€μΉ μμ΄ λ°λ‘ JUnitμ μ¬μ©νλ€. μ¬μ§μ΄ λκ° μλλκ²
λ무λ λ§λ€λ xCode νκ²½μμλ Swift μ Objective-C λ₯Ό ν
μ€νΈ νκΈ° μν
XCTest`κ° κΈ°λ³ΈμΌλ‘ ν¬ν¨λμ΄ μμλ€.
λ¬Όλ‘ , console.assert
λ₯Ό μ¬μ©ν μλ μμ§λ§ μ΄κ²μ μλ μ½λλ₯Ό ν΅ν΄ νμΈν μ μλ―μ΄ ν
μ€νΈ μ½λμ©μΌλ‘ μ ν©νμ§ μλ€.
const isEven = (num) => num % 2 === 0
const test = () => {
const num = 3
const result = isEven(num)
console.assert(result, `The number ${num} is not even.`)
}
test()
console.assert(assertion:obj:[...obj]?:)
,console.assert(assertion:msg:[...msg]?:)
λ ν μ€νΈ μ½λλ₯Ό μμ±νλ λ° μ¬μ©νκΈ°μ μ ν©νμ§ μλ€.
2. Node βassertβ π©βπ»
νμ λΈλΌμ°μ νκ²½μ λ¨Όμ μκ°νκ³ μ½λλ₯Ό μμ±νλ€λ³΄λ λΈλΌμ°μ μμ μ 곡λμ§ μμ§λ§ Node μλ assert
λ₯Ό μ 곡νκ³ μλ€λ κ²μ
μκ² λμλ€. λΉμ°ν λΈλΌμ°μ νκ²½μμ μ 곡λμ§ μλ API μλ κ²μ΄λ€. νμ§λ§ ν΄λΌμ΄μΈνΈ μμ webpack
μ΄λ vitest
, parcel
μ κ°μ λ²λ€λ¬λ₯Ό μ¬μ©νλ©΄ λ°°ν¬ μ Node μ λμμ λ°μ μ»΄νμΌ λκΈ° λλ¬Έμ assert
λ₯Ό μ¬μ©ν μ μλ€.
λ€λ§, μ΄ assert
κ° μκ°μ μΌλ‘λ μ±κ³΅κ³Ό μ€ν¨ μ¬λΆκ° μ ꡬλΆλμ§ μμΌλ©° Jest
λ Vitest
μ κ°μ λΌμ΄λΈλ¬λ¦¬λ€κ³Ό μ¬μ© λ°©λ²μ΄
κ½€ λ€λ₯΄λ€λ μ μ΄λ€.
λ°λΌμ μ΄λ° λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ Jest
μ€νμΌλ‘ ν
μ€νΈ μ½λλ₯Ό μμ±ν μ μλλ‘ κΈ°λ³Έμ μΈ ν
μ€νΈ ν¨μλ₯Ό λ§λ€μ΄λλ©΄ μλνν° λΌμ΄λΈλ¬λ¦¬λ₯Ό
μ€μΉνκ³ , λ²μ μ΄λ λ€λ₯Έ λΌμ΄λΈλ¬λ¦¬μ λν μ’
μμ±μ 체ν¬ν νμ μμ΄ ν μ΄ νλ‘μ νΈ κ°μ κ²μμ μ½κ² μ¬μ©μ΄ κ°λ₯νλ€.
import assert from 'assert';
export const test = (description, callback) => {
try {
callback();
console.log('Test %cpassed%c:', 'color: green', '', description);
} catch (error) {
console.error(
'Test %cfailed%c:',
'color: red',
'',
description,
'-',
error.message,
'\nActual:',
error.actual,
'\nExpected:',
error.expected
);
}
};
export const expect = (value) => {
const toBe = (expected) => assert.strictEqual(value, expected);
const toEqual = (expected) => assert.deepStrictEqual(value, expected);
const not = {
toBe: (expected) => assert.notStrictEqual(value, expected),
toEqual: (expected) => assert.notDeepStrictEqual(value, expected),
};
return { toBe, toEqual, not };
};
toBe
λ Primitive νμ μ κ°κ³Ό, Reference νμ μ κ°μ ν΄λΉνλ ν¬μΈν°(shallow)κ° κ°μμ§λ₯Ό λΉκ΅νλ€.
toEqual
μ reference νμ μ μ€μ κ°(deep)μ΄ κ°μμ§ λΉκ΅νλ€.λ°λΌμ Primitive νμ μ
toBe
λ₯Ό μ¬μ©νκ³ , Reference νμ μ ν¬μΈν°λ₯Ό λΉκ΅ν λλtoBe
λ₯Ό μ¬μ©νκ³ κ°μ λΉκ΅ν λλtoEqual
μ μ¬μ©νλ©΄ λλ€.
μ΄μ μμμ λ§λ ν¨μλ₯Ό μ¬μ©ν΄ ν μ€νΈ μ½λλ₯Ό μμ±ν΄λ³΄μ.
test('Two numbers are equal.', () => {
expect(1 + 2).toBe(3);
});
test('Two strings are equal.', () => {
expect('hello').toBe('hello');
});
test('Two numbers are not equal.', () => {
expect(1 + 2).not.toBe(4);
});
test('Two different objects have same values(deep value equal)', () => {
const obj1 = { a: 1, b: 2 };
const obj2 = { a: 1, b: 2 };
expect(obj1).toEqual(obj2);
});
test('Two different objects have different pointer address.', () => {
const obj1 = { a: 1, b: 2 };
const obj2 = { a: 1, b: 2 };
expect(obj1).not.toBe(obj2);
});
test('Two different objects have different values(deep value not equal).', () => {
const obj1 = { a: 1, b: 2 };
const obj2 = { a: 1, b: 2, c: 4 };
expect(obj1).not.toEqual(obj2);
});
test('Two arrays are equal.', () => {
const arr1 = [1, 2, 3];
const arr2 = [1, 2, 3];
expect(arr1).toEqual(arr2);
});
test('This test will be failed.', () => {
expect(23).toBe(25);
});