피터 라이노스 (Peter Lynos)의 조언에 덧붙이 자면, 단위 테스트에 대한 정확한 아이디어를 소개해 드리겠습니다. 단위 테스트를 수행 할 때 많은 사람들이 잘못된 질문을합니다. "어떻게 테스트합니까?"가 아니라 "무엇을 테스트 할 것인가"입니다. 귀하의 경우 코드, 논리 및 기타 사항을 테스트하려고합니다. 즉, 타사 라이브러리, npm 모듈 및 node.js 코어 API 모듈을 비롯한 모든 외부 요인을 제거해야한다는 의미입니다.
스스로에게 물어보십시오. 테스트 스위트를 복사하고 환경을 설정하지 않고도 실행할 수 있습니까? 당신은 할 수 있어야합니다. 단위 테스트를 작성하는 전체 단계입니다. 코드가 올바른지 확인하기 위해 단위 테스트를 작성해야합니다. 우리는 코드가 고립되어 실행될 수있는 "환경"을 과학계에서 사용 된 것과 같은 용어 인 "제어 환경"이라고 부릅니다.
이제 이것을 달성하려면 조명기 및 mock의 개념을 이해해야합니다. 비품은 당신의 통제 환경을 창조하기 위하여 거기있다. 각 모의 객체가 입력을 받아 출력을 생성하는 수많은 모의 객체를 생성함으로써이를 수행합니다. 이렇게하면 코드의 모든 측면을 정확하게 제어 할 수 있으며 DB 작업에서 REST 요청까지 모든 종류의 항목을 간단하게 테스트 할 수 있습니다.
- 가장 좋은 테스트 스위트는 mock 객체
를 사용하여 코드를 제공하여
- 설비가 환경을 만드는 데 사용되는 고립 된, 제어 환경에서 실행할 수있는 하나입니다
마지막 있음을 이해 한
- 모의 객체가 입력을 받아서 출력을 반환
- 위의 3 가지 작업은 100 % 주입 된 종속성을 사용하여 프로젝트를 코딩 한 경우에만 가능합니다.
, 테스트 코드에서 다음
var FsMock = {
readFile : function readFile(path, encoding, callback) {
if (path === 'unit-test-1')
callback(null, 'This is the file contents');
else
callback(new Error('Unexpected error');
}
}
그리고 당신을 :
모의은 함수 foo의 것을() 당신이 여기 모의가 같아야 방법, 파일의 내용을 읽을 수 가정
개체 'unit-test-1'파일을 읽으려고하면 'This is the file contents'가 반환됩니다.
의존성 삽입 (Dependency Injection)
위의 모든 프로젝트 종속성이 외부에서 주입 한 것으로 기록되어 있지 않은 경우 매우 어려울 것입니다. 지금 당장은 모든 모듈이 모든 의존성을 포함하는 객체를 취하는 make() 함수를 가져야 만한다. 다음은 간단한 예제이다
var Fs = null;
var Path = null;
var TestObj = module.exports = {
make : function make(args) {
if ('undefined' === typeof args.fs)
throw new Error('Dependency: FS module needed');
if ('undefined' === typeof args.path)
throw new Error('Dependency: Path module needed');
Fs = args.fs;
Path = args.fs;
return Object.create(this);
}
}
은 그럼 당신은 자동으로 의존성을 구성, 당신을 위해 그 객체를 구축하는 공장 또는 DI 컨테이너 중 하나가 필요합니다.
오직 BDD와 TDD가 재미있을 것입니다. 희망이 도움이!