I want to run my test file alone - node test/unit/test_404.js
but also with the test suite - node test/unit/runner.js

to achieve that I added an if/else statement in each test file to check if 
the code is running directly with the node executable or if it's required 
by other file.
if it was run directly, I run my server before running the test. 
if the file was required by the test suite runner, I just export the test 
so the runner will call it (module.exports = test).

Here are 2 version of one of the test files - 
http://hastebin.com/fovofufome.js  
They are doing the same thing, except that in version 2 I moved the 
runServerBeforeTest function to it's own helper file. 
I found the first version more readable but it's more verbose and I need to 
repeate that in each test file.
Any opinions or even different approaches for testing?

btw, I deliberately uses node's built-in asserts and not using any test 
framework. I would like to feel pain before adding libraries and so far I 
am happy with this 'leas' approach.

Pasting my code here as well:
   
// test_404.js version 1
// core modulesvar assert = require('assert');
// npm packagevar request = require('request');

// GET /not-exist should return 404 - not foundfunction test(config) {
  console.log('GET /not-exist');

  request({
      uri: "http://localhost:"; + config.webSitePort + "/not-exist",
      followRedirect: false 
    }, 
    function (err, res, body) {
      if (err) {
        console.log('Error in ' + __filename + '. ' + err);
      } else {
        assert.equal(res.statusCode, 404)
        // process.exit();
      };
    });
};
// The following code let us run this test file by itself or as part of the 
runner.js// if this file is by itself with 'node test_foo.js' we need to run 
the server before calling the test// else - expose the test function since the 
runner.js already run the serverif (module === require.main) {
  runServerBeforeTest();
} else {
  module.exports = test;
};
function runServerBeforeTest() {
  // my modules
  var config = require('../../config/test.js');
  var app = require('../../app.js');

  app.init(config, function (err, msg) {
    if (err) {
      console.log('Error during application init: ' + err);
    } else {
      console.log(msg);
      app.start(test(config));
    }
  });
};

// test_404.js version 2

// core modulesvar assert = require('assert');
// npm packagevar request = require('request');

// GET /not-exist should return 404 - not foundfunction test(config) {
  console.log('GET /not-exist');

  request({
      uri: "http://localhost:"; + config.webSitePort + "/not-exist",
      followRedirect: false 
    }, 
    function (err, res, body) {
      if (err) {
        console.log('Error in ' + __filename + '. ' + err);
      } else {
        assert.equal(res.statusCode, 404)
        // process.exit();
      };
    });
};
// The following code let us run this test file by itself or as part of the 
runner.js// if this file is by itself with 'node test_foo.js' we need to run 
the server before calling the test// else - expose the test function since the 
runner.js already run the serverif (module === require.main) {
  runServerBeforeTest();
  require(__dirname + '/helper.js').runServerBeforeTest(test);
} else {
  module.exports = test;
};



// helper.js - after my server is listening, run a given test

module.exports.runServerBeforeTest = runServerBeforeTest;
function runServerBeforeTest(test) {
  // my modules
  var config = require('../../config/test.js');
  var app = require('../../app.js');

  app.init(config, function (err, msg) {
    if (err) {
      console.log('Error during application init: ' + err);
    } else {
      console.log(msg);
      app.start(test(config));
    }
  });
};

// runner.js - after my server is listening - run all test*.js files 
// my modulesvar config = require('../../config/test.js');var app = 
require('../../app.js');var helper = require(__dirname + '/helper.js');
function runTests() {
  console.log('running tests:');

  testFiles = [];
  var test = null;
  testFiles = require("fs").readdirSync(__dirname).filter(function(file) {
    return (/^test/.test(file)) 
  });
  
  testFiles.forEach(function(file) {
    test = require("./" + file);
    if (typeof(test) === 'function') {
      test(config);
    }
  });
};

app.init(config, function (err, msg) {
  if (err) {
    console.log('Error during application init: ' + err);
  } else {
    console.log(msg);
    app.start(runTests(config));
  }
});


-- 
-- 
Job Board: http://jobs.nodejs.org/
Posting guidelines: 
https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
You received this message because you are subscribed to the Google
Groups "nodejs" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/nodejs?hl=en?hl=en



Reply via email to