Chào mọi người, mình đang tập tành viết unit test cho 1 thư viện của mình, cơ mà không biết phải viết sao cho đúng.
Ví dụ mình có function này.
function trimLeft(str: string, char: string): string {
if (str === '')
return ''
let pos = 0
while (str[pos] === char[0])
pos++
return str.substring(pos)
}
Và đây là test mình viết được.
describe('Trim left function', () => {
it.each([
['', '', ''],
['abc', '', 'abc']
])('should not change when no char to trim',
(str: string, char: string, expected: string) => {
expect(trimLeft(str, char)).toBe(expected)
})
it('should returns empty when input is empty', () => {
expect(trimLeft('', 'a')).toBe('')
})
it('should not change when input does not start with the specified char', () => {
expect(trimLeft('abc', 'x')).toBe('abc')
})
it.each([
['abc', 'a', 'bc'],
['aaabc', 'a', 'bc'],
['aaa', 'a', '']
])('should trim all specified char on the left',
(str: string, char: string, expected: string) => {
expect(trimLeft(str, char)).toBe(expected)
})
it('should use the first char to trim only', () => {
expect(trimLeft('abc', 'ab')).toBe('bc')
})
})
Mình muốn hỏi là code test như trên có điểm nào không đúng hay cần cải thiện gì không?
Ngoài ra mình cũng có 1 số thắc mắc về việc test trong thực tế sẽ như thế nào. Cần test với các input như thế nào, có phải nhìn code rồi viết test dựa theo các if else, có nên expect nhiều lần trong 1 test case hay không? Ngoài ra một số trường hợp đặc biệt như 1 function gọi 1 function khác theo điều kiện thì test thế nào,…?
Thanks.