테스트 주도 개발(TDD)의 주요 아이디어는 테스트 중인 코드를 작성하기 전에 자동화된 테스트를 작성하여 코드 작업을 시작하는 것입니다. Javascript에는 Jasmine
, Jest
, Tape
및 Mocha
등 많은 테스트 실행(test-running) 시스템이 있습니다. 그들은 특별한 기능을 가지고 있지만 구문(syntax)은 매우 유사합니다. 선택한 프레임워크가 문제가 되어서는 안됩니다.
테스트 작성은 구문(syntax)보다는 TDD 철학에 더 가깝습니다.
느리고 깨지기 쉽고 비용(시간)이 많이 들기 때문입니다.
테스트 중인 오브젝트에는 세 가지 메시지 출처가 있습니다.
메시지에는 쿼리(query)와 명령(command) 두 가지 유형이 있습니다. 쿼리는 무언가를 반환하거나 아무 것도 변경하지 않습니다. 명령 유형은 아무것도 반환하지 않고 무언가를 변경합니다.
아래의 테스트 결과 그리드는 각 메시지 유형을 단위 테스트할 수 있는 방법을 보여줍니다.
메시지 유형 | 쿼리 | 명령 |
---|---|---|
들어오는(Incoming) | Assert result 들어오는 쿼리 메시지가 반환하는 내용에 대해 assertion을 만들어 테스트합니다. 구현(implementation)이 아닌 인터페이스를 테스트하세요. | 직접적인 공개 부작용에 대한 assertions을 만들어 들어오는 명령 메시지를 테스트합니다. DRY 밖으로 들어오는 메시지의 수신자는 직접적인 공개 부작용(side effects)의 결과의 asserting에 전적인 책임이 있습니다. |
자신에게 보냄 (Sent to Self) | 무시: 프라이빗 메서드를 테스트하지 마세요. | 무시: 프라이빗 메서드를 테스트하지 마세요. |
나가는 (Outgoing) | 무시: 들어오는 쿼리의 수신자는 상태와 관련된 assertion만 책임집니다. 메시지에 눈에 보이는 부작용이 없는 경우 보낸 사람은 메시지를 테스트하지 않아야 합니다. | 모의(mock)를 사용하여 나가는 명령 메시지를 보낼 것으로 예상(Expect) |
Jest는 단순성에 중점을 둔 자바스크립트 테스트 프레임워크이지만 여전히 자바스크립트 코드 베이스의 정확성을 보장합니다. 고유한 글로벌 상태와 병렬로 테스트를 안정적으로 실행하며 빠른 속도와 안전성을 자랑합니다. 작업을 빠르게 하기 위해 Jest는 이전에 실패한 테스트를 먼저 실행하고 테스트 파일에 걸리는 시간에 따라 실행을 재구성(re-organizes)합니다. 또한 Jest는 문서화되어 있으며 구성이 거의 필요하지 않습니다. 실제로 자바스크립트 테스트를 즐겁게 만듭니다. yarn 또는 npm을 사용하여 설치할 수 있습니다.