这篇文章将会介绍怎么在node.js中使用three.js,以便做自动化测试。测试可以用命令行执行,也可以用Travis这样的自动化CI工具。
The short version
如果你很满意node 和 npm,
npm install three --save-dev
添加
var THREE = require('three');
到你的测试代码中。
Create a testable project from scratch
如果你不熟悉这些工具,以下是一个快速指导(给Linux的,Windows的安装过程将略有不同,但是npm命令是相同的)。
Basic setup
1 安装npm和node.js,最简单的方式是这样的:
sudo apt-get install -y npm nodejs-legacy
# fix any problems with SSL in the default registry URL
npm config set registry http://registry.npmjs.org/
2 给项目新建一个文件夹
mkdir test-example
cd test-example
3 用npm初始化项目文件
npm install
通过在所有提示上单击Enter来接受所有默认值。这会创建一个package.json。
4 通过如下命令来启动测试
npm test
会意料之中的执行失败。因为package.json中的test脚本是这个:
"test": "echo\"Error: not test specified\" && exit 1"
Add mocha
用mocha
1 安装mocha
npm install mocha --sava-dev
注意,node_modules/被创建了,你的依赖在这个文件夹里面。而且用–save-dev命令后,属性devDependencies添加到了package.json中。
2 修改package.json文件,用mocha来测试。当测试被调用时,执行mocha并指定一个详细的reporter。默认情况下会执行test/里面的所有测试代码(没有test/就通过mkdir test创建,否则npm 会报npm ERR!,)
"test": "mocha --reporter list"
Add three.js
1 安装three.js
npm install three --save-dev
如果,你想要不同版本的three.js,用这个命令
npm show three version
看哪些版本是可用的,让后告诉npm 安装哪一个版本的
npm install three@0.84.0 --save
(0.84.0 只是一个例子),–save让three.js成为项目的依赖,而不是开发依赖。点击这里了解更多信息。
2 Mocha会查找test文件夹,所以我们创建一个:
mkdir test
3 最后,我们需要一个js文件来test。添加一个简单的测试来看看three.js对象是否可用可正常工作。创建文件test/verify-three.js:
var THREE = require('three');
var 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(){
var vec3 = new THREE.Vector3();
assert.equal(0, vec3.x);
});
});
4 用npm test 执行测试。可以成功执行上面的测试,并且输入如下信息:
✓ 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 (6ms)
Add your own code
你需要做如下3件事情:
1. 为您的代码的预期行为编写一个测试,将它放在test/里面。这里有一个真实项目的例子。
2. 导出您的功能代码,使nodej可以看到它,以便与require一起使用。查看这里。
3. 将你的代码导入测试文件中,像上面导入three.js一样,使用require。
步骤2和3依赖于你是怎么管理代码的。像上面的例子Physics.js一样,导出部分被放在尾部。用module.export来导出对象:
//=============================================================================
// make available in nodejs
//=============================================================================
if (typeof exports !== 'undefined') {
module.exports = Physics;
}
Dealing with dependencies
如果您已经使用了像require.js或browserify这样的好东西,请跳过此部分。
典型的three.js项目是运行在浏览器中的。因此,模块加载由浏览器执行一堆脚本标签来完成。独立的文件不必担心依赖关系。然而在nodejs上下文中,没有index.html绑定所有内容,所以你必须明确依赖关系。
如果要导出依赖于其他文件的模块,则必须告诉node去加载它们。 这儿有一种方法:
1. 在模块的开始,检查你是否在一个nodejs环境中。
2. 如果是这样,请明确声明您的依赖关系。
3. 如果没有,你可能在浏览器中,所以你不需要做任何其他事情。
仍然使用Physics.js这个例子
//=============================================================================
// setup for server-side testing
//=============================================================================
if (typeof require === 'function') // test for nodejs environment{
var THREE = require('three');
var MY3 = require('./MY3.js');
}
点击查看原文 。