Este artigo mostra como colocar o three.js em um ambiente [link:https://nodejs.org/en/ node.js] para que você possa executar testes automatizados. Os testes podem ser executados na linha de comando ou por ferramentas de CI como [link:https://travis-ci.org/ Travis].
Se você estiver confortável com node e npm,
$ npm install three --save-dev
e adicione
const THREE = require('three');
para o seu teste.
Se você não estiver familiarizado com essas ferramentas, aqui está um guia rápido (para linux, o processo de instalação será um pouco diferente do que usando o Windows, mas os comandos do NPM são idênticos).
$ 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
e aceite todas as opções default pressionando Enter em todos os prompts.
Isso criará o package.json.
$ npm test
Isso falhará, o que é esperado.
Se você olhar no package.json, a definição do script de teste é
"test": "echo \"Error: no test specified\" && exit 1"
$ npm install mocha --save-dev
Observe que a pasta node_modules/ é criada e suas dependências aparecem lá.
Observe também que seu package.json foi atualizado: a propriedade devDependencies
é adicionada e atualizada pelo uso de --save-dev.
"test": "mocha --reporter list"
$ npm test
Isso agora deve correr bem, reportando "0 passing (1ms)"
ou similar.
$ npm install three --save-dev
$ npm show three versions
para listar o que está disponível. Para escolher pelo npm a versão correta, use
$ npm install three@0.84.0 --save
(0.84.0 nesse exemplo). --save torna isso uma dependência do projeto, em vez de
dependência dev. Veja os documentos [link:https://docs.npmjs.com/cli/v8/configuring-npm/package-json aqui] para mais informações.
$ 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)
Os itens 2 e 3 variam dependendo de como você gerencia seu código. No exemplo de Physics.js dado acima, a parte de exportação está bem no final. Atribuímos um objeto a module.exports:
//=============================================================================
// make available in nodejs
//=============================================================================
if (typeof exports !== 'undefined')
{
module.exports = Physics;
}
Se você já estiver usando algo como require.js ou browserify, pule esta parte.
Normalmente, um projeto three.js será executado no navegador. O carregamento do módulo é, portanto, feito pelo navegador, executando um monte de tags de script. Seus arquivos individuais não precisam se preocupar com dependências. No entanto, em um contexto nodejs, não há index.html vinculando tudo junto, então você tem que ser explícito.
Se você estiver exportando um módulo que depende de outros arquivos, precisará dizer ao node para carregá-los. Aqui está uma abordagem:
//=============================================================================
// setup for server-side testing
//=============================================================================
if (typeof require === 'function') // test for nodejs environment
{
const THREE = require('three');
const MY3 = require('./MY3.js');
}