Comment puis-je tester "normal" (non-Nœud spécifique) des fonctions JavaScript avec Moka?
Cela semble être devrait être extrêmement simple; cependant, après deux heures de lecture et d'essais et d'erreurs, sans succès, je suis d'admettre la défaite et de vous demander de vous les gars!
Je suis en train d'utiliser Moka avec Should.js pour tester certaines fonctions JavaScript, mais je suis en cours d'exécution dans la portée des questions. J'ai simplifié les plus élémentaires de cas de test, mais je ne peux pas le faire fonctionner.
J'ai un fichier nommé functions.js
, qui contient les éléments suivants:
function testFunction() {
return 1;
}
Et mon tests.js
(situé dans le même dossier) contenu:
require('./functions.js')
describe('tests', function(){
describe('testFunction', function(){
it('should return 1', function(){
testFunction().should.equal(1);
})
})
})
Ce test échoue avec un ReferenceError: testFunction is not defined
.
Je peux voir pourquoi, parce que la plupart des exemples que j'ai trouvé, soit de fixer des objets et des fonctions pour le Nœud global
objet ou de les exporter à l'aide de module.exports
—mais l'utilisation de ces approches signifie mon code de fonction serait de générer des erreurs dans un navigateur standard de la situation, où ces objets n'existent pas.
Alors, comment puis-je avoir accès autonome des fonctions qui sont déclarées dans un fichier script distinct de mes tests, sans l'aide d'un Noeud spécifique de la syntaxe?
- Avez-vous utilisé
exports.testFunction = testFunction
dans votre functions.js ? - Non, le contenu complet de
functions.js
sont affichés. Veuillez lire la question encore une fois—je préciser que je ne veux pas utiliser un Nœud spécifique de la syntaxe dans le fichier source.
Vous devez vous connecter pour publier un commentaire.
Qui ne fait rien puisque vous n'êtes pas à l'exportation. Ce que vous attendez, c'est que
testFunction
est disponible dans le monde entier, essentiellement la même queVous venez de ne peut pas de contournement de l'exportation/globals mécanisme. C'est la manière, node a été conçu. Il n'est pas implicite global contexte partagé (comme
window
sur un navigateur). Tous les "global" de la variable dans un module est pris au piège dans son contexte.Vous devez utiliser
module.exports
. Si vous avez l'intention de partager ce fichier avec un navigateur environnements, il y a des façons de le rendre compatible. Pour un rapide hack il suffit de newindow.module = {}; jQuery.extend(window, module.exports)
dans le navigateur, ouif (typeof exports !== 'undefined'){ exports.testFunction = testFunction }
pour le nœud.exports
.Merci pour les autres réponses ici, j'ai des choses à travailler.
Une chose qui n'était pas mentionné, mais—peut-être parce que c'est la connaissance commune parmi Noders était—ce que vous avez besoin d'affecter le résultat de l'
require
appel à une variable, de sorte que vous pouvez vous y reporter lors de l'appel de vos fonctions exportées à partir de l'intérieur de la suite de test.Voici mon code complet, pour une référence future:
functions.js
:tests.js
:Si vous voulez faire un module disponible par le biais de besoin, vous devriez utiliser
comme vous le savez 😉
il existe une solution si vous souhaitez utiliser un module dans le Nœud et dans le navigateur en effectuant cette
en faisant cela, vous serez en mesure d'utiliser le fichier dans le navigateur et dans le nœud de l'environnement