Monday, May 20, 2024
 Popular · Latest · Hot · Upcoming
122
rated 0 times [  127] [ 5]  / answers: 1 / hits: 26523  / 11 Years ago, wed, january 29, 2014, 12:00:00

I understand module.export and require mannner:



Requiring external js file for mocha testing



Although it's pretty usable as long as it's a module, I feel this manner is inconvenient since what I intends to do now is to test a code in a file.



For instance, I have a code in a file:



app.js



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


and now, I want to test this code in a file:



test.js



var expect = require('chai').expect;

require('./app.js');


describe('INFINITY', function()
{
it('INFINITY === INFINITY',
function()
{
expect(INFINITY)
.to.equal('INFINITY');
});
});


The test code executes app.js, so the output is;



app.js is running



then



ReferenceError: INFINITY is not defined



This is not what I expected.



I do not want to use module.export and to write like



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



and



app.INFINITY and app.anyOtherValue for every line in the test code.



There must be a smart way. Could you tell me?



Thanks.


More From » node.js

 Answers
54

UPDATE: FINAL ANSWER:



My previous answer is invalid since eval(code); is not useful for variables.



Fortunately, node has a strong mehod - vm



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



However, according to the doc,



The vm module has many known issues and edge cases. If you run into issues or unexpected behavior, please consult the open issues on GitHub. Some of the biggest problems are described below.



so, although this works on the surface, extra care needed for such an purpose like testing...



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');
})
});

});


AFTER ALL;
The best way I found in this case is
to write the test mocha code in the same file.


[#72878] Tuesday, January 28, 2014, 11 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
daquanmilesw

Total Points: 57
Total Questions: 102
Total Answers: 110

Location: Wallis and Futuna
Member since Sat, Aug 6, 2022
2 Years ago
daquanmilesw questions
;