Test JavaScript (mocha) avec le fichier js 'import'

Je comprends module.export et require mannner:

Exiger un fichier js externe pour les tests de mocha

Bien qu'il soit assez utilisable tant qu'il s'agit d'un module, je pense que cette façon est gênante puisque ce que j'ai l'intention de faire maintenant est de tester un code dans un fichier.

Par exemple, j'ai un code dans un fichier:

App.js

 'use strict'; console.log('app.js is running'); var INFINITY = 'INFINITY'; 

Et maintenant, je veux tester ce code dans un fichier:

Test.js

 var expect = require('chai').expect; require('./app.js'); describe('INFINITY', function() { it('INFINITY === "INFINITY"', function() { expect(INFINITY) .to.equal('INFINITY'); }); }); 

Le code de test exécute app.js , donc la sortie est;

app.js is running

puis

ReferenceError: INFINITY is not defined

Ce n'est pas ce à quoi je m'attendais.

Je ne veux pas utiliser module.export et écrire comme

var app = require('./app.js');

et

app.INFINITY et app.anyOtherValue pour chaque ligne du code de test.

Il doit y avoir une manière intelligente. Pourrais-tu me dire?

Merci.

MISE À JOUR: RÉPONSE FINALE:

Ma réponse précédente est invalide depuis eval(code); N'est pas utile pour les variables.

Heureusement, le node a un fort mehod – vm

http://nodejs.org/api/vm.html

Toutefois, selon le document,

Le module vm a de nombreux problèmes connus et des cas de bord. Si vous rencontrez des problèmes ou des comportements inattendus, consultez les problèmes ouverts sur GitHub. Certains des plus gros problèmes sont décrits ci-dessous.

Donc, bien que cela fonctionne à la surface, des soins supplémentaires nécessaires à un tel objectif, comme le test …

 var expect = require('chai') .expect; var fs = require('fs'); var vm = require('vm'); var path = './app.js'; var code = fs.readFileSync(path); vm.runInThisContext(code); describe('SpaceTime', function() { describe('brabra', function() { it('MEMORY === "MEMORY"', function() { expect(MEMORY) .to.equal('MEMORY'); }) }); }); 

APRÈS TOUT; La meilleure façon que j'ai trouvée dans ce cas est d'écrire le code de test de mocha dans le même fichier.

_test habituellement un objet _test contenant des références à toutes mes variables et fonctions internes "privées" et je les expose aux exportations. Dans ton cas:

./app.js

 var INFINITY = 'infinity'; function foo() { return 'bar'; } exports._test = { INFINITY: INFINITY, foo: foo } 

./test/app-test.js

 var app = require('../app.js') /* ... */ it('should equal bar', function() { expect(app._test.foo()).to.equal('bar'); }); it('should equal infinity', function() { expect(app._test.INFINITY).to.equal('infinity'); });