์๋ฐ์คํฌ๋ฆฝํธ ํ ์คํธ ๊ฐ๋ ์ ๋ฆฌ
๐จ ๋ค๋ฌ์ ํ์๊ฐ ์๋ ๊ธ์ ๋๋ค.
ํ ์คํธ flow
- ํ ์คํธ ์ฝ๋ ์์ฑ โ ํ ์คํธ ์ฝ๊ณ โ ์คํ โ ์ถ๋ ฅ(Reporter)
ํ ์คํธ ์ข ๋ฅ
- ๋จ์ ํ
์คํธ: ๋ชจ๋์ ๋ถ๋ฆฌ๋ ํ๊ฒฝ์์ ํ
์คํธ
- ์์กด์ฑ์ด ์๋ ๋ชจ๋์ ์ ์ดํ๊ธฐ ์ํด ํ์ฐ์ ์ผ๋ก ๋ชจ์ ๊ฐ์ฒด(Mocking)์ ์ฌ์ฉํ ์๋ฐ์ ์์ผ๋ฉฐ, ์ด ๊ฒฝ์ฐ ๊ฐ ๋ชจ๋์ด ์ค์ ๋ก ์ ์ฐ๊ฒฐ๋์ด ์ํธ ์์ฉํ๋์ง์ ๋ํด์๋ ๊ฒ์ฆํ์ง ๋ชปํ๋ค.
- ํตํฉ ํ
์คํธ: 2๊ฐ ์ด์์ ๋ชจ๋ ๊ฐ์ ์ํธ์์ฉ์ ํ
์คํธ (๊ฐ๋ฐ์ ๊ด์ ์ ํ
์คํธ)
- ๋จ์ ํ ์คํธ์ ๋นํด mocking์ ๋ํ๋ฉฐ, ๋ชจ๋ ๊ฐ์ ์ฐ๊ฒฐ์์ ๋ฐ์ํ๋ ์๋ฌ๋ฅผ ๊ฒ์ฆํ ์ ์๋ค.
- E2E ํ
์คํธ: ์ฌ์ฉ์์ ์คํ ํ๊ฒฝ๊ณผ ๊ฑฐ์ ๋์ผํ ํ๊ฒฝ์์ ํ
์คํธ๋ฅผ ์งํ (์ฌ์ฉ์ ๊ด์ ์ ํ
์คํธ)
- ์ธ๋ถ ๋ชจ๋๋ค์ด ๊ฐ๋ ๋ค์ํ ์ํฉ๋ค์ ์กฐํฉ์ ๊ณ ๋ คํด์ผ ํ๊ธฐ ๋๋ฌธ์ ํ ์คํธ
์๋ฐ์คํฌ๋ฆฝํธ ํ ์คํธ ๋๊ตฌ
์๋ฐ์คํฌ๋ฆฝํธ ํ ์คํธ๋ ๋๊ตฌ๋ค์ ์๋์ ๊ฐ์ด ๋ถ๋ฅํ ์ ์๋ค.
Test RunnersTesting FrameworksAssertion LibrariesTesting Plugins
ํ ์คํธ๋ฅผ ๊ตฌ๋ํ ์ ์๋ ํ๊ฒฝ์ ์ ๊ณตํ๋ ํ ์คํธ ๋ฌ๋์ ํ ์คํธ ์ฝ๋ ์์ฑ์ ์ํ ๊ธฐ๋ฐ์ ๋ง๋ค์ด์ฃผ๋ ํ ์คํธ ํ๋ ์์ํฌ, ์ค์ ๋ก ํ ์คํธ ํ ํญ๋ชฉ์ด ํ ์คํธ ํ๋ ค๋ ๊ฒ๊ณผ ๋์ผํ์ง ์ฒดํฌํ ์ ์๊ฒ ํด์ฃผ๋ ๋จ์ธ(assertion) ๋ผ์ด๋ธ๋ฌ๋ฆฌ, mocks, stubs, and fake servers๋ฅผ ๋ง๋ค ์ ์๊ฒ ํด์ฃผ๋ ํ ์คํ ํ๋ฌ๊ทธ์ธ์ด ์๋ค.
Test Runner
ํ
์คํธ ๋ฌ๋ ์ค ์ ๋ช
ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์์๋ก ๋ค๋ฉด Karma ๊ฐ์ ๊ฒ์ด ์๋ค.
๋ ๋ง์ ์ข ๋ฅ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ดํด๋ณด๋ ค๋ฉด ์๋ ์ฌ์ดํธ๋ฅผ ๋ค์ด๊ฐ๋ณด๋ฉด ๋๋ค.
https://www.browserstack.com/docs/automate/javascript-testing/test-runners
์๋ฐ์คํฌ๋ฆฝํธ ํ ์คํธ ํ๊ฒฝ
์๋ฐ์คํฌ๋ฆฝํธ ํ
์คํธ๋ ๋ธ๋ผ์ฐ์ ํ๊ฒฝ๊ณผ Node.js ํ๊ฒฝ์์ ์คํํ ์ ์๋ค.
์์์ ์์๋ฅผ ๋ค์๋ Karma๋ ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์์ ํ
์คํธ๋ฅผ ๋๋ฆด ์ ์๊ฒ ํด์ฃผ๋ runner ์ด๊ณ , ๋ค์ํ ๋ธ๋ผ์ฐ์ ์์ ํ
์คํธ๋ฅผ ๋๋ฆด ์ ์๋ fake server๋ง ๋ง๋ค์ด ์ค ๋ฟ Mocha์ ๊ฐ์ ํ
์คํธ ํ๋ ์์ํฌ๋ฅผ ํจ๊ฒ ์ฌ์ฉํด์ ํ
์คํธ๋ฅผ ์์ฑํด์ผ ํ๋ค.
๊ทธ๋ ๋ค๋ฉด Node.js ํ๊ฒฝ์์ ๋์๊ฐ๋ ํ
์คํธ ๋ฌ๋๋ค์ ์ด๋ค ๊ฒ์ด ์์๊น? ํ
์คํธ ๋ฌ๋์ ์คํ ํ๊ฒฝ๊ณผ ํ
์คํธ ์ฝ๋์ ์คํ ํ๊ฒฝ์ ๊ตฌ๋ถํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์(๋๋ค Node.js) Node.js ํ๊ฒฝ์์ ๋์๊ฐ๋ ํ
์คํธ ๋ฌ๋ ๋ณด๋ค๋ ๋๋ถ๋ถ ํ
์คํธ ํ๋ ์์ํฌ๋ก์จ ํตํฉ๋ ํํ๋ก ์ ๊ณต ๋๋ค. ์ฆ, Mocha, Jest, Jasmine ๋ Node.js ํ๊ฒฝ์์ ๋์๊ฐ๋ ํ
์คํธ ํ๋ ์์ํฌ์ด๋ค.
๋ค์ํ๋ฒ, Test Runner ์ ๋ฆฌ
- ์๋ฐ์คํฌ๋ฆฝํธ ํ
์คํธ๋
๋ธ๋ผ์ฐ์ ํ๊ฒฝ๊ณผNode.js ํ๊ฒฝ์์ ์คํํ ์ ์๋ค. - ํ๋ ์ผ (๊ธฐ๋ฅ)
- ํ ์คํธ ์ฝ๊ณ โ ์คํ โ ์ถ๋ ฅ(Reporter)
- Watcher
- ์ข
๋ฅ
๋ธ๋ผ์ฐ์ ์์ ์ง์ ์ฝ๋ ์คํ- ์ข
๋ฅ
- Karma
- ํ ์คํธ ๊ณผ์ : command์์ Karma ์คํ โ ์์ฒด ์น์๋ฒ ๊ตฌ๋ โ ํ ์คํธ๋ฅผ ์ํ HTML ํ์ด์ง ์์ฑ โ ์์ค์ฝ๋ ๋ก๋(ํ ์คํธ + ์์ค) โ ๋ธ๋ผ์ฐ์ ์ง์ ์คํ โ ํ ์คํธ ์คํ ๊ฒฐ๊ณผ๋ ๋ธ๋ผ์ฐ์ ์ฝ์๋ก ์ถ๋ ฅ โ Karma๊ฐ ์ง์ ๋ ๋ฆฌํฌํฐ๋ฅผ ์ฌ์ฉํด ๊ฒฐ๊ณผ๋ฅผ ์ ๋ฆฌํ์ฌ ์ปค๋ฉ๋์ ๋ณด์ฌ์ค
- ํ ์คํธ ๋ฌ๋์ ์ญํ ๋ง ํ๋ฏ๋ก Jasmine ์ฌ์ฉ์ ๊ถ์ฅํจ
- Selenium ๋๊ตฌ๋ฅผ ์ด์ฉํ๋ฉด ๋ค์ํ ํ๊ฒฝ(์ด์์ฒด์ , ๋ธ๋ผ์ฐ์ ) ํ ์คํธ๋ฅผ ์คํ ๊ฐ๋ฅ
- Karma
- ์ฅ์ : ๋ธ๋ผ์ฐ์ ์ ๋ชจ๋ ๊ธฐ๋ฅ(๋คํธ์ํฌ IO, ๋ ๋๋ง ์์ง ๋ฑ)์ ํ์ฉํด์ ํ ์คํธ
- ๋จ์
- ํ ์คํธ์ ์ด๊ธฐ ๊ตฌ๋ ์๋๊ฐ ๋๋ฆผ (Node.js ํ๋ก์ธ์ค๋ณด๋ค ๋ฌด๊ฑฐ์)
- ๋ชจ๋ ๋จ์์ ํ ์คํธ๋ฅผ ์คํํ๊ธฐ๊ฐ ์ด๋ ค์(๋ฒ๋ค๋ฌ ์ฌ์ฉ ํ์)
- ๋ธ๋ผ์ฐ์ ๋ฐ์ฒ(launcher)๋ฅผ ์ถ๊ฐ๋ก ์ค์นํด ์ค์ผ ํจ.
- ํฌ๋ก์ค ๋ถ๋ผ์ฐ์ง ํ
์คํธ๋ฅผ ์ํ ๋ณ๋ ํ๊ฒฝ ๊ตฌ์ถ ๋น์ฉ์ด ํผ
- โ ๋จ์ ๊ทน๋ณต1: headless ๋ธ๋ผ์ฐ์ ์ฌ์ฉ (๊ฐ๋ฐ์์๋ headless ๋ธ๋ผ์ฐ์ ์ฌ์ฉ์ผ๋ก ๋น ๋ฅธ ํผ๋๋ฐฑ์ ์ป๊ณ ๊ฐ๋ฐ ์๋ฃ ํน์ ๋ฐฐํฌ์์๋ง CI๋ฅผ ํตํด ํฌ๋ก์ค ๋ถ๋ผ์ฐ์ง ํ ์คํธ)
- โ ๋จ์ ๊ทน๋ณต2: Browser Stack, Sauce Lab ๋ฑ์ ์ธ๋ถ ์๋น์ค ์ฌ์ฉ. (ํ ์คํธ ํ๊ฒฝ์ ์ง์ ๊ตฌ์ถํ ํ์์์ด Karama์ ์ฝ๊ฒ ์ฐ๋ ๊ฐ๋ฅ)
- ์ข
๋ฅ
Node.js์์ ์คํ (= Testing Framework)- ํ ์คํธ ๋ฌ๋์ ์คํ ํ๊ฒฝ๊ณผ ์ฝ๋์ ์คํ ํ๊ฒฝ์ ๊ตฌ๋ถํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋๋ถ๋ถ ํ ์คํธ ํ๋ ์์ํฌ์ ํตํฉ๋ ํํ๋ก ์ ๊ณต.
- โ ์ฆ, ํ ์คํธ ๋ฌ๋์ ํ ์คํธ ํ๋ ์์ํฌ๊ฐ ํตํฉ๋์ด ์์ด ์ค์น ๋ฐ ์คํ์ด ๋น๊ต์ ๊ฐ๋จ
- ์ข
๋ฅ
- Jest
- Mocha
- Jasmine
- ์ฅ์
- ์๋(๋ธ๋ผ์ฐ์ ์ ํ๋ก์ธ์ค์ ๋นํด ํจ์ฌ ๊ฐ๋ฒผ์ โ ์คํ ์๋๊ฐ ๋น ๋ฅด๋ค)
- ์ํ๋ ๋ชจ๋๋ง ๊ฐ์ ธ์์(import) ํ ์คํธํ ์ ์๊ธฐ ๋๋ฌธ์ ํจ์ฌ ๊ฐ๋จํ๊ณ ์์ ํ ๋ฐฉ์์ผ๋ก ํ ์คํธ ๊ฐ๋ฅ
- ๋จ์
- ๋ธ๋ผ์ฐ์ ์ ๋ชจ๋ API๋ฅผ ์ ๋๋ก ํ์ฉํ ์ ์์. (๋ธ๋ผ์ฐ์ ๊ฐ ์ ๊ณตํ๋ DOM(Document Object Model)์ด๋ BOM(Browser Object Model) ๋ฑ์ API๊ฐ ์์)
- โ ๋จ์ ๊ทน๋ณต: ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด jsdom๊ณผ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์ ๊ฐ์์ผ๋ก ๊ตฌํํ๋ ๋ฐฉ์์ ์ฌ์ฉ
- ๋ธ๋ผ์ฐ์ ์ ๋ชจ๋ API๋ฅผ ์ ๋๋ก ํ์ฉํ ์ ์์. (๋ธ๋ผ์ฐ์ ๊ฐ ์ ๊ณตํ๋ DOM(Document Object Model)์ด๋ BOM(Browser Object Model) ๋ฑ์ API๊ฐ ์์)
Testing Framework
Framework์์๋ Jest ์ ๊ฐ์ด assertion library๊น์ง ํฌํจํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค๋ ์๊ณ , Mocha ์ ๊ฐ์ด assertion library๋ ํฌํจํ์ง ์๋ ๊ฒฝ์ฐ๋ ์๋ค. Mocha์์๋ Chai์ ๊ฐ์ assertion library๋ฅผ ์ด์ฉํด์ผ ํ๋ค.
์์ฑ๋ฒ ์์ฝ
describe๋ฅผ ์ด์ฉํด์ ํ
์คํธ๋ฅผ grouping ํ๊ณ it์ด๋ test๊ตฌ๋ฌธ์ ์จ์ ํ๋์ ํ
์คํธ๋ฅผ ์์ฑํ๋ค.
๊ทธ๋ฆฌ๊ณ ํ๋์ ํ
์คํธ ์์์ expect โฆ toBe, toHave, ๋ฑ๋ฑ ์ ๊ธฐ์ ํ๋ค.
describe('updateAll', () => {
it('no force', () => {
return updateAll(TableName, ["fileName"], {compandId: "test"})
.then(updatedItems => {
let undefinedCount = 0;
for (let item of updatedItems) {
undefinedCount += item === undefined ? 1 : 0;
}
// console.log("result", result);
expect(undefinedCount).toBe(updatedItems.length);
})
});
test('force update', () => {
return updateAll(TableName, ["fileName"], {compandId: "test"}, true)
.then(updatedItems => {
let undefinedCount = 0;
for (let item of updatedItems) {
undefinedCount += item === undefined ? 1 : 0;
}
// console.log("result", result);
expect(undefinedCount).toBe(0);
})
});
});์ฐธ๊ณ ๋ก, it๊ณผ test์ ์ฐจ์ด๋ ๋๋ค ๋๊ฐ์ ์ญํ ์ ํ๋๋ฐ it์ RSpec ์คํ์ผ์ ๊ธฐ์ ๋ฐฉ์์ด๊ณ , test๋ xUnit ์คํ์ผ์ ๊ธฐ์ ๋ฐฉ์์ ์ฐจ์ด์ด๋ค. (์ฐธ๊ณ )
๊ทธ๋ ๋ค๋ฉด, ์ด๋ ๋ถ๋ถ๊น์ง๊ฐ Testing Framework๊ณ ์ด๋๊น์ง๊ฐ assertion ์ผ๊น?
it์ด๋ test ๋ธ๋ก ์์์ ์ฐ๋ฆฌ๋ ์ธ๋ถ์ ์ธ ํ
์คํธ๋ฅผ ์์ฑํ๋๋ฐ, ๊ทธ๋ expect...toBe, toHave, equal ๋ฑ๋ฑ์ ๋ฌธ๊ตฌ๋ก ์์ฑํ๊ฒ ๋๋ค. ์ด๋ถ๋ถ์ด assertion library ๋ถ๋ถ์ด๋ผ๊ณ ๋ณด๋ฉด ๋๋ค.
Jest ๊ฐ์ ๊ฒฝ์ฐ์๋ assertion library๋ฅผ ํจ๊ป ์ ๊ณตํ๋ฏ๋ก Mocha + chai ์ ๊ฐ์ด ์ถ๊ฐ์ ์ธ ์กฐํฉ์ ํด์ฃผ์ง ์์๋ ๋๋ค.
๋ค์ํ๋ฒ, Test Framework ์ ๋ฆฌ
- ํ๋์ผ (๊ธฐ๋ฅ)
- ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ ๊ธฐ๋ฐ์ ์ ๊ณต
- ํ๋ ์์ํฌ๊ฐ ์ ๊ณตํ๋ ํจ์๋ค์ ์ฌ์ฉํด์ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑ
- ํ๋ ์์ํฌ๊ฐ ํ ์คํธ ์ฝ๋๋ฅผ ์๋์ผ๋ก ์คํ
- ํ ์คํธ ์ฑ๊ณต ๋ฐ ์คํจ์ ๋ํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ
- ์ข
๋ฅ
- Mocha, Jasmine, AVA, Jest, Selenium
Assertion Library
- ํ๋์ผ
- assertion์ ๊ฐ๋ณ ํ ์คํธ๊ฐ ํต๊ณผํ๊ธฐ ์ํ ์กฐ๊ฑด์ ๋ช ํํ๊ฒ ๊ธฐ์ ํ๊ธฐ ์ํด ์ฌ์ฉ
- ๋ณดํต์ ํ ์คํธ ํ๋ ์์ํฌ์์ ๋ค์ํ ๋ฐฉ์์ ๋จ์ธ API๋ฅผ ๊ธฐ๋ณธ ์ ๊ณต
- ํ ์คํธ ํ๋ ์์ํฌ์์ ๊ธฐ๋ณธ ์ ๊ณต๋๋ ๊ฒฝ์ฐ๊ฐ ๋๋ถ๋ถ์ด๋ฉฐ, Mocha์ ๊ฒฝ์ฐ์๋ง Chai์ ๊ฐ์ ๋ณ๋์ ๋จ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋๋ก ๊ถ์ฅํ๊ณ ์๋ค.
- ์ข
๋ฅ
- BDD
- Chai
- Jasmine
- TDD?
- JUnit?
- BDD
Testing Plugin
ํ
์คํธ ๋๋ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ผ๊ณ ๋ ๋ถ๋ฆฌ๋๋ฐ, ์ค์ ๊ฐ์ฒด ๋์ ํ
์คํธ๋ฅผ ์ํด ๋์ํ๋ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ธฐ ์ํด ์คํ์ด(spy), ์คํ
(stub), ๋ชฉ(mock) ๋ฑ๋ฑ์ ๋์์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
ํ ์คํธ ํ๋ ์์ํฌ์์ ๊ธฐ๋ณธ ์ ๊ณต๋๋ ๊ฒฝ์ฐ๊ฐ ๋๋ถ๋ถ์ด๋ฉฐ, Mocha์ ๊ฒฝ์ฐ์๋ง Sinon.JS ๋ฑ์ ๋ณ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋๋ก ๊ถ์ฅํ๊ณ ์๋ค.
์์ฆ msw๋ฅผ ์ฌ์ฉํด ๋ณด์๋๋ฐ ๋ค์ ๊ธ์์๋ mocking ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋น๊ตํด๋ณด๊ณ ์ ํ๋ค
์ฐธ๊ณ
https://ui.toast.com/fe-guide/ko_TEST/#๋จ์ธassertion-๋ผ์ด๋ธ๋ฌ๋ฆฌ