Ici vous sera expliqué comment obtenir three.js dans un environnement [link:https://nodejs.org/en/ node.js] pour que vous puissez exécuter des tests automatisés. Les tests peuvent êtres lancés en lignes de commande, ou grâce à des outils de CI automatisés comme [link:https://travis-ci.org/ Travis].
Si vous êtes à l'aise avec node et npm,
$ npm install three --save-dev
et ajoutez
const THREE = require('three');
à votre test.
Si vous n'êtes pas familier avec ces outils, vous trouverez ici un guide rapide (pour linux, le processus d'installation sera légèrement différent de celui pour Windows, mais les commandes NPM sont identiques).
$ 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
et acceptez tous les paramètres par défaut en appuyant sur Entrée à chaque prompt.
Cela créera package.json.
$ npm test
Cela va échouer, comme prévu.
Si vous jetez un coup d'oeil à votre package.json, la définition du test de script sera
"test": "echo \"Error: no test specified\" && exit 1"
$ npm install mocha --save-dev
Remarquez que node_modules/ est créé et que vos dépendances y apparaissent.
Notez également que votre package.json a été mis à jour: la propriété devDependencies
est ajoutée et mis à jour par l'utilisation de --save-dev.
"test": "mocha --reporter list"
$ npm test
Cela doit maintenant réussir, signalant 0 passages (1ms)
ou similaire.
$ npm install three --save-dev
$ npm show three versions
pour voir
ce qui est disponible. Pour indiquer à npm la bonne, utilisez
$ npm install three@0.84.0 --save
(0.84.0 dans cet exemple). --save qui en fait une dépendance de ce projet, au lieu
d'une dépendance dev. Voir la documentation [link:https://docs.npmjs.com/cli/v8/configuring-npm/package-json ici] pour plus d'informations.
$ 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)
Les items 2 et 3 varient selon la façon dont vous organisez votre code. Dans l'exemple de Physics.js montré plus-haut, la partie concernant l'export est à la toute fin. Nous assignons un objet à module.exports:
//=============================================================================
// make available in nodejs
//=============================================================================
if (typeof exports !== 'undefined')
{
module.exports = Physics;
}
Si vous utlisez déjà quelque chose d'astucieux comme require.js ou browserify, sautez cette partie.
Généralement un projet three.js s'exécute dans le navigateur. Le module de chargement est par conséquent réalisé par le navigateur qui exécute un ensemble de scripts. Vos fichiers individuels n'ont pas à gérer les dépendances. Dans un contexte nodejs, il n'y a pas d'index.html reliant tout ensemble, vous devez donc être explicites.
Si vous exportez un module qui dépend d'autres fichiers, vous devrez dire à node de les charger. Voici une approche:
//=============================================================================
// setup for server-side testing
//=============================================================================
if (typeof require === 'function') // test for nodejs environment
{
const THREE = require('three');
const MY3 = require('./MY3.js');
}