"Node.js"의 두 판 사이의 차이

오픈소스 비즈니스 컨설팅
둘러보기로 가기 검색하러 가기
 
 
(같은 사용자의 중간 판 41개는 보이지 않습니다)
1번째 줄: 1번째 줄:
 
Server Side JavaScript인 Node.js를 정리 합니다.
 
Server Side JavaScript인 Node.js를 정리 합니다.
  
==node.js 개요==
+
*홈페이지 : [http://nodejs.org/ http://nodejs.org/]
 +
**[http://nodejs.sideeffect.kr/docs/ http://nodejs.sideeffect.kr/docs/]
 +
*다운로드 : [http://nodejs.org/download/ http://nodejs.org/download/]
 +
*라이선스 : 
 +
*플랫폼 : [[JavaScript|JavaScript]]
 +
 
 +
== Node.js 개요 ==
 +
 
 
Node.js는 서버사이드 자바스크립트이며 Google의 자바스크립트 엔진인 V8이 빌트인되어 있습니다. Event 기반이며 non-blocking I/O를 지원합니다. 자바스크립트의 표준라이브러리 프로젝트인 [http://commonjs.org/ CommonJS]의모듈시스템을 지원합니다.
 
Node.js는 서버사이드 자바스크립트이며 Google의 자바스크립트 엔진인 V8이 빌트인되어 있습니다. Event 기반이며 non-blocking I/O를 지원합니다. 자바스크립트의 표준라이브러리 프로젝트인 [http://commonjs.org/ CommonJS]의모듈시스템을 지원합니다.
  
 
*Event loop 방식
 
*Event loop 방식
 +
 
:*동작 요청시 동작이 완료될 경우에 실행될 Call Back을 지정하는 방식
 
:*동작 요청시 동작이 완료될 경우에 실행될 Call Back을 지정하는 방식
  
==참고 문헌==
+
== Node.js 설치 ==
*[[Nginx]]
+
 
 +
=== CentOS에서 설치 ===
 +
 
 +
yum install nodejs npm
 +
 
 +
=== Windows에서 설치 ===
 +
 
 +
[http://nodejs.org/download/ 다운로드 사이트]에서 node-v0.12.0-x64.msi 파일을 다운로드 하여 설치 합니다.
 +
 
 +
== Node.js 문법 ==
 +
 
 +
=== Node.js 기초 ===
 +
 
 +
=== 내장 상수 ===
 +
 
 +
=== 내장 함수와 특수 함수 ===
 +
 
 +
=== 상수/변수 선언 ===
 +
 
 +
=== 객체 선언 ===
 +
 
 +
=== Module 선언 ===
 +
 
 +
Node.js는 [http://www.commonjs.org/ CommonJS] 형태의 모듈을 사용 한다.
 +
 
 +
별도의 파일에 생성할 모듈을 위한 코드를 작성 한다. 작성한 코드를 modules.exports(={}) 객체에 할당하면 다른 프로그램에서 호출하여 사용할 수 있다.
 +
 
 +
모듈을 불러쓰는 프로그램
 +
"use strict";
 +
 +
var myModule=require("myModule.js");
 +
var yourModule=require("yourFolder");                      #--- Folder가 지정될 경우 index.js 파일이 호출된다.
 +
 
 +
모듈을 작성한 프로그램 (myModule.js)
 +
#--- module.exports와 exports는 같은 것이다.
 +
module.exports = {
 +
    #--- 여기에 코드를 기술 한다.
 +
}
 +
exports.~ = { ~ }                                            #--- 개발 코드를 등록 한다.
 +
 
 +
=== 연산자 ===
 +
 
 +
=== 조건문/반복문 ===
 +
 
 +
=== 오류 처리 ===
 +
 
 +
try {
 +
 +
} catch(error) {
 +
}
 +
 
 +
=== 기타 문법 ===
 +
 
 +
=== Type 변환 ===
 +
 
 +
== 입출력 ==
 +
 
 +
=== 전역 변수 ===
 +
 
 +
* 전역 객체 : global
 +
:* process.env : 애플리케이션 실행 환경
 +
:* process.version : node.js 버전
 +
:* process.arch : CPU 정보
 +
:* process.platform : Platform 정보
 +
:* process.argv : 실행 명령 파라미터
 +
:* Event 전역 객체
 +
::* process.exit : 애플리케이션 종료 이벤트
 +
::* process.beforeExit : 애플리케이션이 종료 되기 전에 발생하는 이벤트
 +
::* process.uncaughtException : 예외 처리되지 않은 이벤트
 +
:* 전역 함수
 +
::* process.exit : 애플리케이션 종료
 +
::* process.nextTick : 이벤트 루프내 동작을 모두 실행한 후 콜백 실행
 +
::* setTimeout : 동작 지연
 +
::* setEnterval : 동작 반복
 +
::* clearTimeout
 +
:* console.log(~), console.info(~), console.warn(~), console.error(~)
 +
:* console.time(TIMER_NAME), console.timeEnd(TIMER_NAME)
 +
 
 +
global.console.log(~)
 +
console.log(~)                                        //--- global은 생략 가능
 +
 
 +
=== 브라우저 입출력 ===
 +
 
 +
=== Cookie 입출력 ===
 +
 
 +
=== 세션 입출력 ===
 +
 
 +
=== 데이터베이스 입출력 ===
 +
 
 +
=== 파일 입출력 ===
 +
 
 +
//--- __dirname : 현재 폴더
 +
//--- __filename : 현재 파일명
 +
var pathUtil = require('path');
 +
var path = __dirname + pathUtil.sep + 'logo.png';
 +
pathUtil.join(~, ~);
 +
 +
path = pathUtil.normalize(path);
 +
// path.basename();
 +
// path.dirname();
 +
// path.extname();
 +
var info = path.parse(~);
 +
 +
var fs = require('fs');
 +
fs.access(~, mode, callback)      //--- fs.F_OK, fs.R_OK, fs.W_OK, fs.X_OK
 +
fs.accessSync(~, mode)
 +
 +
fs.stat(~, callback);
 +
fs.statSync(~);
 +
 +
var fd = fs.openSync(~, 'rwa);
 +
fs.closeSync(fd);
 +
 +
fs.open(~, 'rwa', function(error, fd) { ~ });
 +
fs.close(fs, callback);
 +
 +
fs.unlink(~);
 +
fs.rename(~, ~, callback);
 +
fs.renameSync(~, ~)
 +
 +
fs.readdir(~, callback)
 +
fs.readdirSync(~)
 +
fs.mkdir(~, callback)
 +
fs.rmdir(~, callback)
 +
fs.mkdirSync(~)
 +
fs.rmdirSync(~)
 +
 
 +
동기식
 +
var fs = require('fs');
 +
var content = fs.readFileSync("readme.txt", "utf8");
 +
 +
console.log(content);
 +
 +
fs.writeFileSync(~, ~)
 +
 
 +
비동기식
 +
var fs = require('fs');
 +
fs.readFile("readme.txt", "utf9", function(error, content) {
 +
  if (error) {
 +
    console.log("Error");
 +
    return;
 +
  }
 +
  console.log(content);
 +
});
 +
 +
fs.writeFile(~, ~, callback);
 +
 
 +
=== 이메일 입출력 ===
 +
 
 +
=== Command Line 입출력 ===
 +
 
 +
== Core Module ==
 +
 
 +
== 유용한 Node.js 모듈 ==
 +
 
 +
=== Util ===
 +
 
 +
var util = require('util');
 +
 +
util.format(~);
 +
util.inherits(자식, 부모);                          //--- 상속
 +
 
 +
=== EventEmitter ===
 +
 
 +
emitter.addListener(event, listener)
 +
emitter.on(event, function(error, result) { ~ })
 +
emitter.once(event, listener)                        //--- 한번만 실행
 +
emitter.removeListener(event, listener)
 +
emitter.removeAllListeners([event])
 +
emitter.setMaxListeners(n)                          //--- 이벤트 핸들러 최대 갯수 지정
 +
emitter.emit(event, ...)                            //--- 이벤트를 강제로 발생
 +
 +
var customEvent = new event.EventEmitter();
 +
customEvent.on(~, ~);
 +
 
 +
=== Express ===
 +
웹 어플리케이션을 만들기 위한 framework 이다.
 +
 
 +
=== Debug ===
 +
 
 +
https://www.npmjs.com/package/debug
 +
 
 +
$env:DEBUG_COLORS='no'
 +
$env:DEBUG_DEPTH=10
 +
$env:DEBUG_SHOW_HIDDEN='enabled'
 +
 +
$env:DEBUG='*'
 +
 
 +
== Console ==
 +
 
 +
node 명령을 사용하여 node Console을 실행할 수 있습니다.
 +
 
 +
종료시에는 process.exit(0); 또는 Ctrl_C + Ctrl_C를 눌러 줍니다.
 +
 
 +
== Package 관리 ==
 +
 
 +
modbus 폴더를 만들고 jsmodbus 모듈을 설치 한다.
 +
mkdir -p /work/appl/modbus
 +
cd /work/appl/modbus
 +
npm init
 +
    #--- scada_modbus, 0.0.1, Modbus for SCADA, scada.js, 엔터, 엔터, 엔터, OBCon, 엔터, yes
 +
    This utility will walk you through creating a package.json file.
 +
    It only covers the most common items, and tries to guess sensible defaults.
 +
 +
    See `npm help json` for definitive documentation on these fields
 +
    and exactly what they do.
 +
 +
    Use `npm install <pkg> --save` afterwards to install a package and
 +
    save it as a dependency in the package.json file.
 +
 +
    Press ^C at any time to quit.
 +
    name: (modbus) scada_modbus
 +
    version: (1.0.0) 0.0.1
 +
    description: Modbus for SCADA
 +
    entry point: (index.js) scada.js
 +
    test command:
 +
    git repository:
 +
    keywords:
 +
    author: OBCon
 +
    license: (ISC)
 +
    About to write to /work/appl/modbus/package.json:
 +
 +
    {
 +
      "name": "scada_modbus",
 +
      "version": "0.0.1",
 +
      "description": "Modbus for SCADA",
 +
      "main": "scada.js",
 +
      "scripts": {
 +
        "test": "echo \"Error: no test specified\" && exit 1"
 +
      },
 +
      "author": "OBCon",
 +
      "license": "ISC"
 +
    }
 +
    Is this ok? (yes) yes
 +
 +
# npm install [모듈명] --save                                  #--- 모듈 설치후 package.json 파일에 추가
 +
npm install jsmodbus --save                                  #--- 3.1.0
 +
npm install -g mocha                                        #--- 5.2.0
 +
npm install -g    sinon                                      #--- 6.3.3
 +
 
 +
npm 주요 명령
 +
 
 +
npm init : 패키지 관리 설정 파일인 package.json 파일을 생성 한다.
 +
npm install [모듈명] --save : 모듈을 설치하고 package.json 파일에 반영 한다.
 +
npm install [모듈명] --save-dev : 모듈을 설치하고 package.json 파일의 개발용 모듈에 반영 한다.
 +
npm install : package.json 파일을 참조하여 필요한 모듈을 설치 한다.
 +
npm install -g 전역 설치 : CLI로 사용
 +
 
 +
# npm init                                                  #--- 패키지 관리 설정 파일인 package.json 파일을 생성 한다.
 +
# npm install jsmodbus --save                              #--- jsmodbus 3.1.0 설치
 +
vi  package.json
 +
    {
 +
      "name": "scada_modbus",
 +
      "version": "0.0.1",
 +
      "keywords": [
 +
        "SCADA",
 +
        "Modbus"
 +
      ],
 +
      "description": "Modbus for SCADA",
 +
      "main": "scada.js",
 +
      "scripts": {
 +
        "test": "echo \"Error: no test specified\" && exit 1"
 +
      },
 +
      "author": "OBCon Inc.",
 +
      "license": "Copyright OBCon Inc. All right reserved.",
 +
      "dependencies": {
 +
        "jsmodbus": "^3.1.0"
 +
      },
 +
      "devDependencies": {}
 +
    }
 +
npm install                                            #--- package.json 파일로 설치를 시작 한다.
 +
npm update
 +
 +
npm install -g mocha                                    #--- mocha 5.2.0 전역 설치
 +
npm install -g sinon                                    #--- sinon 6.3.3 전역 설치
 +
 +
npm list                                                #--- 설치된 모듈 목록 조회
 +
npm list -g --depth=0                                  #--- 전역 설치된 모듈 목록 조회
 +
 +
npm uninstall ~
 +
npm uninstall ~ --save|--save-dev
 +
 +
npm version major                                      #--- Major 버전을 올립니다.
 +
npm version minor                                      #--- Minor 버전을 올립니다.
 +
npm version patch                                      #--- Patch 버전을 올립니다.
 +
 
 +
참고 문헌
 +
* https://heropy.blog/2018/02/18/node-js-npm/
 +
 
 +
== Test Framework ==
 +
 
 +
<span style="color:#008000;"><span style="font-size:larger;">테스트 방식</span></span>
 +
 
 +
*TDD (Test-Driven Development)&nbsp;: 테스트 자체에 집중
 +
*BDD (Behaviour-Driven Development)&nbsp;: 비즈니스 요구 사항에 집중
 +
 
 +
 
 +
 
 +
<span style="color:#008000;"><span style="font-size:larger;">Karma 모듈을 설치 합니다.</span></span>
 +
 
 +
*설정 파일 :&nbsp;karma.conf.js,&nbsp;test-main.js
 +
*테스트 모듈 실행 : karma start karma-conf.js
 +
 
 +
npm install karma-cli -g<br/>npm install karma -g --save-dev<br/>npm install karma-coverage --save-dev<br/>npm install karma-jasmine --save-dev<br/># npm install karma-chrome-launcher --save-dev<br/>karma --version
 +
 
 +
karma init karma.conf.js<br/># Which testing framework do you want to use ? jasmine<br/># Do you want to use Require.js ? yes<br/># Do you want to capture any browsers automatically ? Chrome<br/># What is the location of your source and test files ?<br/># Should any of the files included by the previous patterns be excluded ?<br/># Do you wanna generate a bootstrap file for RequireJS? yes<br/># Do you want Karma to watch all the files and run the tests on change ? yes
 +
 
 +
환경 변수 설정&nbsp;: CHROME_BIN = chrome.exe
 +
 
 +
 
 +
 
 +
<span style="color: rgb(0, 128, 0); font-size: 15.6000003814697px; line-height: 24.9600009918213px;">Jasmine 모듈을 설치 합니다.</span>
 +
 
 +
*설정 파일 : spec/support/jasmine.json
 +
*테스트 모듈 실행&nbsp;
 +
**js/sample.js, test/sampleSpec.js
 +
**모든 Test 프로그램은 ~Spec.js 형태로 작성하여야 합니다.
 +
**jasmine-node --test-dir test --color --verbose
 +
**jasmine-node --test-dir test --autotest --watch test --color
 +
 
 +
npm install jasmine -g<br/>jasmine init
 +
 
 +
npm install jasmine-node -g<br/>jasmine-node --version
 +
 
 +
<br/>참고 문헌
 +
 
 +
*Karma
 +
**[http://programmingsummaries.tistory.com/327 http://programmingsummaries.tistory.com/327]
 +
**[http://mobicon.tistory.com/407 http://mobicon.tistory.com/407]
 +
**[http://webframeworks.kr/tutorials/angularjs/angularjs_unit_test/ http://webframeworks.kr/tutorials/angularjs/angularjs_unit_test/]
 +
*Mocha
 +
**[http://blog.outsider.ne.kr/770 http://blog.outsider.ne.kr/770]
 +
**[http://unitjs.com/guide/mocha.html http://unitjs.com/guide/mocha.html]
 +
*Supertest
 +
**[http://hatemogi.com/holiday-project-day-03/ http://hatemogi.com/holiday-project-day-03/]
 +
*[http://blog.outsider.ne.kr/1078 http://blog.outsider.ne.kr/1078]
 +
*[http://required.cafe24.com/blog/2014/05/hello-karmajs/ http://required.cafe24.com/blog/2014/05/hello-karmajs/]
 +
 
 +
== 참고 문헌 ==
 +
 
 +
*[http://blog.grotesq.com/post/448 Apahce, Nginx를 node.js의 프록시로 연결하기, 2014.04]
 +
*[http://pyrasis.com/nodejs/nodejs-HOWTO http://pyrasis.com/nodejs/nodejs-HOWTO]
 +
*[http://bcho.tistory.com/tag/node.js http://bcho.tistory.com/tag/node.js]
 +
*[[Nginx|Nginx]]
  
 
*[http://crazia.tistory.com/955 Node.js: 완벽 튜토리얼 정리, 2012.11]
 
*[http://crazia.tistory.com/955 Node.js: 완벽 튜토리얼 정리, 2012.11]
 
*[http://nodejs-kr.org/insidejs/archives/670 Node.js를 활용하여 웹페이지 긁어오기., 2011.12]
 
*[http://nodejs-kr.org/insidejs/archives/670 Node.js를 활용하여 웹페이지 긁어오기., 2011.12]
 
+
[[Category:JavaScript|Category:JavaScript]]
[[Category:JavaScript]]
 

2018년 9월 24일 (월) 22:05 기준 최신판

Server Side JavaScript인 Node.js를 정리 합니다.

Node.js 개요

Node.js는 서버사이드 자바스크립트이며 Google의 자바스크립트 엔진인 V8이 빌트인되어 있습니다. Event 기반이며 non-blocking I/O를 지원합니다. 자바스크립트의 표준라이브러리 프로젝트인 CommonJS의모듈시스템을 지원합니다.

  • Event loop 방식
  • 동작 요청시 동작이 완료될 경우에 실행될 Call Back을 지정하는 방식

Node.js 설치

CentOS에서 설치

yum install nodejs npm

Windows에서 설치

다운로드 사이트에서 node-v0.12.0-x64.msi 파일을 다운로드 하여 설치 합니다.

Node.js 문법

Node.js 기초

내장 상수

내장 함수와 특수 함수

상수/변수 선언

객체 선언

Module 선언

Node.js는 CommonJS 형태의 모듈을 사용 한다.

별도의 파일에 생성할 모듈을 위한 코드를 작성 한다. 작성한 코드를 modules.exports(={}) 객체에 할당하면 다른 프로그램에서 호출하여 사용할 수 있다.

모듈을 불러쓰는 프로그램

"use strict";

var myModule=require("myModule.js");
var yourModule=require("yourFolder");                       #--- Folder가 지정될 경우 index.js 파일이 호출된다.

모듈을 작성한 프로그램 (myModule.js)

#--- module.exports와 exports는 같은 것이다.
module.exports = {
    #--- 여기에 코드를 기술 한다.
}
exports.~ = { ~ }                                            #--- 개발 코드를 등록 한다.

연산자

조건문/반복문

오류 처리

try {

} catch(error) {
}

기타 문법

Type 변환

입출력

전역 변수

  • 전역 객체 : global
  • process.env : 애플리케이션 실행 환경
  • process.version : node.js 버전
  • process.arch : CPU 정보
  • process.platform : Platform 정보
  • process.argv : 실행 명령 파라미터
  • Event 전역 객체
  • process.exit : 애플리케이션 종료 이벤트
  • process.beforeExit : 애플리케이션이 종료 되기 전에 발생하는 이벤트
  • process.uncaughtException : 예외 처리되지 않은 이벤트
  • 전역 함수
  • process.exit : 애플리케이션 종료
  • process.nextTick : 이벤트 루프내 동작을 모두 실행한 후 콜백 실행
  • setTimeout : 동작 지연
  • setEnterval : 동작 반복
  • clearTimeout
  • console.log(~), console.info(~), console.warn(~), console.error(~)
  • console.time(TIMER_NAME), console.timeEnd(TIMER_NAME)
global.console.log(~)
console.log(~)                                         //--- global은 생략 가능

브라우저 입출력

Cookie 입출력

세션 입출력

데이터베이스 입출력

파일 입출력

//--- __dirname : 현재 폴더
//--- __filename : 현재 파일명
var pathUtil = require('path');
var path = __dirname + pathUtil.sep + 'logo.png';
pathUtil.join(~, ~);

path = pathUtil.normalize(path);
// path.basename();
// path.dirname();
// path.extname();
var info = path.parse(~);

var fs = require('fs');
fs.access(~, mode, callback)      //--- fs.F_OK, fs.R_OK, fs.W_OK, fs.X_OK
fs.accessSync(~, mode)

fs.stat(~, callback);
fs.statSync(~);

var fd = fs.openSync(~, 'rwa);
fs.closeSync(fd);

fs.open(~, 'rwa', function(error, fd) { ~ });
fs.close(fs, callback);

fs.unlink(~);
fs.rename(~, ~, callback);
fs.renameSync(~, ~)

fs.readdir(~, callback)
fs.readdirSync(~)
fs.mkdir(~, callback)
fs.rmdir(~, callback)
fs.mkdirSync(~)
fs.rmdirSync(~)

동기식

var fs = require('fs');
var content = fs.readFileSync("readme.txt", "utf8");

console.log(content);

fs.writeFileSync(~, ~)

비동기식

var fs = require('fs');
fs.readFile("readme.txt", "utf9", function(error, content) {
  if (error) {
    console.log("Error");
    return;
  }
  console.log(content);
});

fs.writeFile(~, ~, callback);

이메일 입출력

Command Line 입출력

Core Module

유용한 Node.js 모듈

Util

var util = require('util');

util.format(~);
util.inherits(자식, 부모);                           //--- 상속

EventEmitter

emitter.addListener(event, listener)
emitter.on(event, function(error, result) { ~ })
emitter.once(event, listener)                        //--- 한번만 실행
emitter.removeListener(event, listener)
emitter.removeAllListeners([event])
emitter.setMaxListeners(n)                           //--- 이벤트 핸들러 최대 갯수 지정
emitter.emit(event, ...)                             //--- 이벤트를 강제로 발생

var customEvent = new event.EventEmitter();
customEvent.on(~, ~);

Express

웹 어플리케이션을 만들기 위한 framework 이다.

Debug

https://www.npmjs.com/package/debug

$env:DEBUG_COLORS='no'
$env:DEBUG_DEPTH=10 
$env:DEBUG_SHOW_HIDDEN='enabled'

$env:DEBUG='*'

Console

node 명령을 사용하여 node Console을 실행할 수 있습니다.

종료시에는 process.exit(0); 또는 Ctrl_C + Ctrl_C를 눌러 줍니다.

Package 관리

modbus 폴더를 만들고 jsmodbus 모듈을 설치 한다.

mkdir -p /work/appl/modbus
cd /work/appl/modbus
npm init
   #--- scada_modbus, 0.0.1, Modbus for SCADA, scada.js, 엔터, 엔터, 엔터, OBCon, 엔터, yes
   This utility will walk you through creating a package.json file.
   It only covers the most common items, and tries to guess sensible defaults.

   See `npm help json` for definitive documentation on these fields
   and exactly what they do.

   Use `npm install <pkg> --save` afterwards to install a package and
   save it as a dependency in the package.json file.

   Press ^C at any time to quit.
   name: (modbus) scada_modbus
   version: (1.0.0) 0.0.1
   description: Modbus for SCADA
   entry point: (index.js) scada.js
   test command:
   git repository:
   keywords:
   author: OBCon
   license: (ISC)
   About to write to /work/appl/modbus/package.json:

   {
     "name": "scada_modbus",
     "version": "0.0.1",
     "description": "Modbus for SCADA",
     "main": "scada.js",
     "scripts": {
       "test": "echo \"Error: no test specified\" && exit 1"
     },
     "author": "OBCon",
     "license": "ISC"
   }
   Is this ok? (yes) yes

# npm install [모듈명] --save                                  #--- 모듈 설치후 package.json 파일에 추가
npm install jsmodbus --save                                  #--- 3.1.0
npm install -g mocha                                         #--- 5.2.0
npm install -g    sinon                                      #--- 6.3.3

npm 주요 명령

npm init : 패키지 관리 설정 파일인 package.json 파일을 생성 한다.
npm install [모듈명] --save : 모듈을 설치하고 package.json 파일에 반영 한다.
npm install [모듈명] --save-dev : 모듈을 설치하고 package.json 파일의 개발용 모듈에 반영 한다.
npm install : package.json 파일을 참조하여 필요한 모듈을 설치 한다.
npm install -g 전역 설치 : CLI로 사용
# npm init                                                  #--- 패키지 관리 설정 파일인 package.json 파일을 생성 한다.
# npm install jsmodbus --save                               #--- jsmodbus 3.1.0 설치
vi  package.json
   {
     "name": "scada_modbus",
     "version": "0.0.1",
     "keywords": [
       "SCADA",
       "Modbus"
     ],
     "description": "Modbus for SCADA",
     "main": "scada.js",
     "scripts": {
       "test": "echo \"Error: no test specified\" && exit 1"
     },
     "author": "OBCon Inc.",
     "license": "Copyright OBCon Inc. All right reserved.",
     "dependencies": {
       "jsmodbus": "^3.1.0"
     },
     "devDependencies": {}
   }
npm install                                             #--- package.json 파일로 설치를 시작 한다.
npm update

npm install -g mocha                                    #--- mocha 5.2.0 전역 설치
npm install -g sinon                                    #--- sinon 6.3.3 전역 설치

npm list                                                #--- 설치된 모듈 목록 조회
npm list -g --depth=0                                   #--- 전역 설치된 모듈 목록 조회

npm uninstall ~ 
npm uninstall ~ --save|--save-dev

npm version major                                       #--- Major 버전을 올립니다.
npm version minor                                       #--- Minor 버전을 올립니다.
npm version patch                                       #--- Patch 버전을 올립니다.

참고 문헌

Test Framework

테스트 방식

  • TDD (Test-Driven Development) : 테스트 자체에 집중
  • BDD (Behaviour-Driven Development) : 비즈니스 요구 사항에 집중


Karma 모듈을 설치 합니다.

  • 설정 파일 : karma.conf.js, test-main.js
  • 테스트 모듈 실행 : karma start karma-conf.js

npm install karma-cli -g
npm install karma -g --save-dev
npm install karma-coverage --save-dev
npm install karma-jasmine --save-dev
# npm install karma-chrome-launcher --save-dev
karma --version

karma init karma.conf.js
# Which testing framework do you want to use ? jasmine
# Do you want to use Require.js ? yes
# Do you want to capture any browsers automatically ? Chrome
# What is the location of your source and test files ?
# Should any of the files included by the previous patterns be excluded ?
# Do you wanna generate a bootstrap file for RequireJS? yes
# Do you want Karma to watch all the files and run the tests on change ? yes

환경 변수 설정 : CHROME_BIN = chrome.exe


Jasmine 모듈을 설치 합니다.

  • 설정 파일 : spec/support/jasmine.json
  • 테스트 모듈 실행 
    • js/sample.js, test/sampleSpec.js
    • 모든 Test 프로그램은 ~Spec.js 형태로 작성하여야 합니다.
    • jasmine-node --test-dir test --color --verbose
    • jasmine-node --test-dir test --autotest --watch test --color

npm install jasmine -g
jasmine init

npm install jasmine-node -g
jasmine-node --version


참고 문헌

참고 문헌