Sto cercando di capire come sviluppare codice JavaScript stand-alone. Voglio scrivere codice Javscript con test e moduli, in esecuzione dalla riga di comando. Quindi ho installato node.js
e npm
insieme alle librerie requirejs
, underscore
e mocha
.Perché vedo "definire non definito" quando si esegue un test Mocha con RequireJS?
mia struttura di directory simile a questo:
> tree .
.
├── node_modules
├── src
│ └── utils.js
└── test
└── utils.js
dove src/utils.js
è un piccolo modulo che sto scrivendo, con il seguente codice:
> cat src/utils.js
define(['underscore'], function() {
"use strict";
if ('function' !== typeof Object.beget) {
Object.beget = function (o) {
var f = function() {
};
f.prototype = o;
return new f();
};
}
});
e test/utils.js
è il test:
> cat test/utils.js
var requirejs = require('requirejs');
requirejs.config({nodeRequire: require});
requirejs(['../src/utils'], function(utils) {
suite('utils', function() {
test('should always work', function() {
assert.equal(1, 1);
})
})
});
che poi provo a eseguire dalla directory di livello superiore (così mocha
vede la directory test
):
> mocha
node.js:201
throw e; // process.nextTick error, or 'error' event on first tick
^
Error: Calling node's require("../src/utils") failed with error: ReferenceError: define is not defined
at /.../node_modules/requirejs/bin/r.js:2276:27
at Function.execCb (/.../node_modules/requirejs/bin/r.js:1872:25)
at execManager (/.../node_modules/requirejs/bin/r.js:541:31)
...
Quindi le mie domande sono:
- E 'questo il modo corretto di strutturare il codice?
- Perché il test non è in esecuzione?
- Qual è il modo migliore per imparare questo genere di cose? Ho difficoltà a trovare buoni esempi con Google.
Grazie ...
[dispiace - momentaneamente pubblicato i risultati di codice errato; risolto ora]
PS Sto usando requirejs perché voglio anche eseguire questo codice (o parte di esso) da un browser, in seguito.
Aggiornamento/Soluzione
Qualcosa che non è nelle risposte qui sotto è che avevo bisogno di usare mocha -u tdd
per lo stile di prova di cui sopra. Ecco la prova finale (che richiede anche assert) e il suo uso:
> cat test/utils.js
var requirejs = require('requirejs');
requirejs.config({nodeRequire: require});
requirejs(['../src/utils', 'assert'], function(utils, assert) {
suite('utils', function() {
test('should always work', function() {
assert.equal(1, 1);
})
})
});
> mocha -u tdd
.
✔ 1 tests complete (1ms)
Per far sì che funzioni, devo installare il modulo amdefine e aggiungere questi coffeescript di riga = >> define = require ('amdefine') (module) if (typeof define! = 'Function') << = in il mio file 'classe' per farlo funzionare (non il file di test). Questo è un po 'fastidioso dal momento che è necessario avere un compito per rimuovere questo dopo aver testato – devric