javascript - Mocha JS: How to reference members from asynch before function in describe/it test functions -


i'm trying dynamically load settings asynchronously config files before running test suite. test suite needs take config object test, , create server connection beforeeach test - close server connection aftereach test. have following code outline, test suite (nested describe) called before setup (before) function has finished; means testconfigs array empty. i'm trying achievable, or have fundamentally change test?

describe('test server configs', function () {      var testconfigs = [];      before('get server configurations', function (done) {         var conf = path.resolve('conf');         fs.readdir(conf, function (err, files) {                 files.foreach(function (file) {                     var config = require(path.join(conf, file));                     testconfigs.push(config);                 });             }              console.dir(testconfigs); //prints non-empty array             done(err);         });     });      describe('server test suite', function () {          if (testconfigs.length == 0) {             it('no server configurations test!'); //0 tests passed, 1 pending         }         else {             testconfigs.foreach(function (config) { //testconfigs empty here                 var connection;                  beforeeach('connect server', function (done) {                     connection = serverconnection(config);                     done();                 });                  it('should remote server', function (done) {                     //test 'connection' object                     expect(connection.dosomething).withargs('just test', done).not.to.throwerror();                 });                  aftereach('close connection', function (done) {                     connection.close(done);                 });              });         }     });  }); 

results:

      test server configs [ [ 'local-config.json',     { host: 'localhost',       user: 'username',       pass: 'password',       path: '/' } ],   [ 'foo.com-config.json',     { host: 'foo.com',       user: 'foo',       pass: 'bar',       path: '/boo/far' } ] ]     server test suite       - no server configurations test!     0 passing (25ms)   1 pending 

you can add new tests when test run has been started. if want dynamically generate test cases, should before test start. can use synchronous methods read configs before tests

var testconfigs = [] var conf = path.resolve('conf'); var files = fs.readdirsync(conf); files.foreach(function (file) {     var config = require(path.join(conf, file));     testconfigs.push(config); });  describe('server test suite', function () {    testconfigs.foreach(function (config) {       //describe dynamic test cases    }); }); 

upd 26.07.15

if can't use synchronous function reasons, can run mocha programmatically when setup has done.

var mocha = require('mocha'); var fs = require('fs'); var mocha = new mocha({});  var testconfigs = global.testconfigs; fs.readdir(conf, function (err, files) {     files.foreach(function (file) {         var config = require(path.join(conf, file));         testconfigs.push(config);     });     mocha.run(); }); 

you have pass testconfigs via global scope, because mocha loads modules test synchronously , config must ready untill moment when mocha requires tests.


Comments

Popular posts from this blog

javascript - Karma not able to start PhantomJS on Windows - Error: spawn UNKNOWN -

c# - Display ASPX Popup control in RowDeleteing Event (ASPX Gridview) -

Nuget pack csproj using nuspec -