Testing-with-NPM.html 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. <!DOCTYPE html>
  2. <html lang="it">
  3. <head>
  4. <meta charset="utf-8" />
  5. <base href="../../../" />
  6. <script src="page.js"></script>
  7. <link type="text/css" rel="stylesheet" href="page.css" />
  8. </head>
  9. <body>
  10. <h1>Testare con NPM ([name])</h1>
  11. <p class="desc">
  12. Questo articolo mostra come inserire three.js in un ambiente
  13. [link:https://nodejs.org/en/ node.js] così che tu possa eseguire test
  14. automatici. I test possono essere eseguiti da linea di comando o da
  15. strumenti CI automatici come [link:https://travis-ci.org/ Travis].
  16. </p>
  17. <h2>Versione breve</h2>
  18. <p>
  19. Se sei a tuo agio con node e npm, installa npm
  20. <code> $ npm install three --save-dev </code>
  21. e aggiungi
  22. <code> const THREE = require('three'); </code>
  23. al tuo test.
  24. </p>
  25. <h2>Creare un progetto testabile da zero</h2>
  26. <p>
  27. Se non sei familiare con questi strumenti, ecco una guida rapida per
  28. linux (il processo di installazione sarà leggermente diverso usando
  29. Windows, ma i comandi NPM saranno uguali).
  30. </p>
  31. <h3>Configurazione di base</h3>
  32. <div>
  33. <ol>
  34. <li>
  35. Installa [link:https://www.npmjs.org/ npm] e nodejs. Il percorso più
  36. breve in genere assomiglia a qualcosa del simile:
  37. <code>
  38. $ sudo apt-get install -y npm nodejs-legacy
  39. # fix any problems with SSL in the default registry URL
  40. $ npm config set registry http://registry.npmjs.org/
  41. </code>
  42. </li>
  43. <li>
  44. Crea una nuova cartella per il progetto
  45. <code> $ mkdir test-example; cd test-example </code>
  46. </li>
  47. <li>
  48. Crea un nuovo file di progetto tramite npm:
  49. <code> $ npm init </code>
  50. e accetta tutti i valori suggeriti premendo Enter per ogni richiesta.
  51. Con queste richieste si creerà il file package.json.
  52. </li>
  53. <br />
  54. <li>
  55. Prova ad avviare la funzione di test con:
  56. <code> $ npm test </code>
  57. fallirà, come ci aspettiamo. Se controlli nel file package.json la
  58. definizione dello script di test è:
  59. <code> "test": "echo \"Error: no test specified\" && exit 1" </code>
  60. </li>
  61. </ol>
  62. </div>
  63. <h2>Aggiungere mocha</h2>
  64. <div>
  65. Utilizzeremo [link:https://mochajs.org/ mocha].
  66. <ol>
  67. <li>
  68. Installare mocha con:
  69. <code> $ npm install mocha --save-dev </code>
  70. Si noti che è stata creata la cartella node_modules/ e le tue
  71. dipendenze sono state installate al suo interno. Inoltre, si noti che
  72. il file package.json è stato aggiornato: è stata aggiunta la proprietà
  73. devDependencies, aggiornata dal comando --save-dev.
  74. </li>
  75. <br />
  76. <li>
  77. Modificare il file package.json per usare mocha per i test. Quando
  78. viene invocato il test, vogliamo eseguire mocha e specificare un
  79. reporter dettagliato. Per impostazione predefinita questo eseguirà
  80. qualsiasi cosa nella cartella test/ (non avendo una cartella test/ si può
  81. incorrere in un npm ERR!, bisogna crearla con il comando mkdir test)
  82. <code> "test": "mocha --reporter list" </code>
  83. </li>
  84. <li>
  85. Rilanciare il test con:
  86. <code> $ npm test </code>
  87. Adesso il test dovrebbe essere eseguito con successo, riportando "0 passing (1ms) or
  88. similar".
  89. </li>
  90. </ol>
  91. </div>
  92. <h2>Aggiungere three.js</h2>
  93. <div>
  94. <ol>
  95. <li>
  96. Inseriamo la nostra dipendenza three.js con il comando:
  97. <code> $ npm install three --save-dev </code>
  98. <ul>
  99. <li>
  100. Se hai bisogno di una versione di three.js diversa, usa
  101. <code> $ npm show three versions </code>
  102. per vedere quali sono le versioni disponibili. Per dire ad npm la versione
  103. scelta, usa
  104. <code> $ npm install [email protected] --save </code>
  105. (0.84.0 nell'esempio). --save fa sì che sia una dipendenza del
  106. progetto piuttosto che una devDependecy. Per maggiori informazioni
  107. consulta il documento
  108. [link:https://docs.npmjs.com/cli/v8/configuring-npm/package-json qui].
  109. </li>
  110. </ul>
  111. </li>
  112. <li>
  113. Mocha cercherà i test nella cartella test/, quindi creiamola
  114. <code> $ mkdir test </code>
  115. </li>
  116. <li>
  117. Infine abbiamo effettivamente bisogno di un test JS per l'esecuzione.
  118. Aggiungiamo un semplice test il quale verificherà che l'oggetto
  119. three.js sia disponibile e funzionante. Crea il file
  120. test/verify-three.js contenente:
  121. <code>
  122. const THREE = require('three');
  123. const assert = require('assert');
  124. describe('The THREE object', function() {
  125. it('should have a defined BasicShadowMap constant', function() {
  126. assert.notEqual('undefined', THREE.BasicShadowMap);
  127. }),
  128. it('should be able to construct a Vector3 with default of x=0', function() {
  129. const vec3 = new THREE.Vector3();
  130. assert.equal(0, vec3.x);
  131. })
  132. })
  133. </code>
  134. </li>
  135. <li>
  136. Adesso rieseguiamo il test con il comando $ npm test. Questo dovrebbe
  137. eseguire i test sopra definiti e terminare con successo, mostrando qualcosa del tipo:
  138. <code>
  139. The THREE object should have a defined BasicShadowMap constant: 0ms
  140. The THREE object should be able to construct a Vector3 with default of x=0: 0ms
  141. 2 passing (8ms)
  142. </code>
  143. </li>
  144. </ol>
  145. </div>
  146. <h2>Aggiungere il tuo codice</h2>
  147. <div>
  148. Hai bisogno di fare tre cose:
  149. <ol>
  150. <li>
  151. Scrivere un test per il comportamento che di aspetti dal tuo codice, e
  152. metterlo all'interno della cartella test/.
  153. [link:https://github.com/air/encounter/blob/master/test/Physics-test.js Qui] un esempio di un progetto reale.
  154. </li>
  155. <li>
  156. Esportare il tuo codice funzionale in modo tale che nodejs possa vederlo
  157. per usarlo insieme a require. Controlla
  158. [link:https://github.com/air/encounter/blob/master/js/Physics.js qui].
  159. </li>
  160. <li>
  161. Richiamare il tuo codice nel file di test, allo stesso modo in cui
  162. abbiamo fatto per richiamare three nell'esempio sopra `require('three')`
  163. </li>
  164. </ol>
  165. <p>
  166. Il punto 2 e 3 saranno molto dipendenti da come hai gestito il tuo codice.
  167. Nell'esempio di Physics.js fornito sopra, la parte di esportazione si trova giustamente
  168. alla fine. Assegniamo un oggetto a module.exports:
  169. </p>
  170. <code>
  171. //=============================================================================
  172. // make available in nodejs
  173. //=============================================================================
  174. if (typeof exports !== 'undefined') { module.exports = Physics; }
  175. </code>
  176. </div>
  177. <h2>Affrontare le dipendenze</h2>
  178. <div>
  179. <p>
  180. Se stai già utilizzando qualcosa di smart come require.js o browserify,
  181. salta questa parte.
  182. </p>
  183. <p>
  184. Tipicamente un progetto three.js verrà eseguito nel browser. Il caricamento
  185. del modulo viene quindi eseguito dal browser che esegue una serie di tag
  186. di script. I tuo singoli file non si devono preoccupare per le dipendenze.
  187. Tuttavia, in un contesto nodejs non è presente il file index.html che lega tutto
  188. insieme, quindi devi essere esplicito.
  189. </p>
  190. <p>
  191. Se stai esportando un modulo che dipende da altri file, dovrai dire a node
  192. di caricarli. Di seguito un approccio:
  193. </p>
  194. <ol>
  195. <li>
  196. All'inizio del tuo modulo, controlla se ti trovi in un ambiente nodejs.
  197. </li>
  198. <li>Se è così, dichiara esplicitamente le tue dipendenze.</li>
  199. <li>
  200. In caso contrario, probabilmente sei in un browser e quindi non devi fare
  201. nient'altro.
  202. </li>
  203. </ol>
  204. Esempio di codice da Physics.js:
  205. <code>
  206. //=============================================================================
  207. // setup for server-side testing
  208. //=============================================================================
  209. if (typeof require === 'function') // test for nodejs environment {
  210. const THREE = require('three'); const MY3 = require('./MY3.js'); }
  211. </code>
  212. </div>
  213. </body>
  214. </html>