이 문서에서는 [link:https://nodejs.org/en/ node.js] 환경에서 three.js를 사용해 자동 테스트를 진행해보는 방법을 알려드립니다. 테스트는 커맨드 라인으로 실행이 가능하며 [link:https://travis-ci.org/ Travis]같은 CI 툴을 통해 자동으로 실행이 가능합니다.
node와 npm이 친숙하다면,
$ npm install three --save-dev
그리고 여기에
const THREE = require('three');
를 추가합니다.
이 툴들에 익숙치 않다면, 아래의 간단한 가이드(리눅스 기반으로, 윈도우에서의 설치 절차와는 조금 다릅니다. 하지만 NPM 커맨드는 같습니다)를 따라주세요.
$ sudo apt-get install -y npm nodejs-legacy
# 기본 레지스트리 URL에서 SSL 문제가 생기면 수정해주세요
$ npm config set registry http://registry.npmjs.org/
$ mkdir test-example; cd test-example
$ npm init
엔터를 계속 쳐서 기본 설정으로 동의 후 진행하세요.
이 절차가 끝나면 package.json 파일이 생길 것입니다.
$ npm test
아마 실패가 뜰 것입니다.
package.json 파일을 보면, test 스크립트의 경로가 다음과 같이 되어 있을 것입니다.
"test": "echo \"Error: no test specified\" && exit 1"
$ npm install mocha --save-dev
node_modules/이 생성되어 있고 파일들이 있어야 합니다.
그리고 package.json의 내용이 업데이트 되었는지도 확인해봐야 합니다.
--save-dev를 통해 devDependencies 속성에 업데이트가 되어있어야 합니다.
"test": "mocha --reporter list"
$ npm test
아마 성공 메세지가 뜨고 0 passing (1ms)와 비슷한 문구가 뜰 것입니다.
$ npm install three --save-dev
$ npm show three versions
사용 가능한 버전을 확인해, npm에게 특정 버전을 사용하라고 합니다.
$ npm install three@0.84.0 --save
(이 예제에서는 0.84.0 버전을 사용했습니다.). --save 는 dev 설정이 아닌 이 프로젝트의 의존성으로 추가하는 명령어입니다.
여기([link:https://www.npmjs.org/doc/json.html link])에서 더 많은 내용을 확인하세요.
$ mkdir test
const THREE = require('three');
const assert = require('assert');
describe('The THREE object', function() {
it('should have a defined BasicShadowMap constant', function() {
assert.notEqual('undefined', THREE.BasicShadowMap);
}),
it('should be able to construct a Vector3 with default of x=0', function() {
const vec3 = new THREE.Vector3();
assert.equal(0, vec3.x);
})
})
The THREE object should have a defined BasicShadowMap constant: 0ms
The THREE object should be able to construct a Vector3 with default of x=0: 0ms
2 passing (8ms)
2번과 3번 과정은 자신의 코드를 어떻게 관리하는지에 따라 달려 있습니다. 위의 Physics.js 예제에서는 내보내기 부분이 맨 마지막에 있습니다. module.exports에 할당했습니다.
//=============================================================================
// make available in nodejs
//=============================================================================
if (typeof exports !== 'undefined')
{
module.exports = Physics;
}
require.js나 browserify같은 현명한 방법을 사용하고 있다면 이 부분은 넘어가세요.
일반적으로 three.js 프로젝트는 브라우저에서 돌아가게 하기 위한 목적입니다. 따라서 모듈 로딩은 브라우저가 스크립트 태그를 실행함으로써 이루어집니다. 개인 파일은 의존성에 대해 걱정하지 않아도 됩니다. 하지만 nodejs 환경에서는 모든 것을 묶어놓은 index.html이 없기 때문에, 분명히 해 둘 필요가 있습니다.
다른 파일에 의존하는 모듈을 내보내기 할 때에는, node에 같이 내보내기하라고 알려줘야 합니다. 그 방법 중 하나는 다음과 같습니다:
//=============================================================================
// 서버사이드 테스트 설정
//=============================================================================
if (typeof require === 'function') // nodejs 환경 테스트
{
const THREE = require('three');
const MY3 = require('./MY3.js');
}