本文介绍如何将three.js放入[link:https://nodejs.org/en/ node.js]环境中执行自动化测试。 测试可以在命令行上运行,也可以通过自动化 CI工具,如[link:https://travis-ci.org/ Travis]
如果你熟悉node 和 npm,
$ npm install three --save-dev
然后添加
var THREE = require('three');
到你的测试文件中
如果你不熟悉这些工具,这里有一个快速指南(对于linux,安装过程 使用Windows会略有不同,但NPM命令是相同的)。
$ 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/
$ mkdir test-example; cd test-example
$ npm init
接受所有默认设定,在提示问题时候都按回车。这会创建package.json文件。
$ npm test
这将会失败,符合预期。
在package.json中, 测试脚本的定义是
"test": "echo \"Error: no test specified\" && exit 1"
$ npm install mocha --save-dev
注意依赖存储路径 node_modules/ 会被创建.
同时注意package.json被更新了: 属性devDependencies
被新增,由于这个指令 --save-dev.
"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 in this example). --save makes this a dependency of this project, rather than
dev dependency. See the docs [link:https://www.npmjs.org/doc/json.html here] for more info.
$ mkdir test
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);
})
})
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的例子中 如上所述,export部分在最后。 我们将一个对象分配给module.exports:
//=============================================================================
// make available in nodejs
//=============================================================================
if (typeof exports !== 'undefined')
{
module.exports = Physics;
}
如果你已经使用了聪明的东西,比如require.js或browserify,请跳过这一部分。
通常一个three.js项目会在浏览器运行。浏览器通过执行一堆标签脚本来加载模块。你的个人文件没必要担心依赖问题。但在nodejs上下文中,没有index.html绑定这些,所以必须显式声明。
如果您要导出依赖于其他文件的模块,则必须告诉节点加载它们。 这是一种方法:
//=============================================================================
// setup for server-side testing
//=============================================================================
if (typeof require === 'function') // test for nodejs environment
{
var THREE = require('three');
var MY3 = require('./MY3.js');
}