107 lines
2.1 KiB
JavaScript
107 lines
2.1 KiB
JavaScript
|
/*
|
||
|
*
|
||
|
*
|
||
|
*
|
||
|
*
|
||
|
*
|
||
|
*
|
||
|
*
|
||
|
*
|
||
|
*
|
||
|
*
|
||
|
*
|
||
|
* DO NOT EDIT THIS FILE
|
||
|
* For FCC testing purposes!
|
||
|
*
|
||
|
*
|
||
|
*
|
||
|
*
|
||
|
*
|
||
|
*
|
||
|
*
|
||
|
*
|
||
|
*
|
||
|
*
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
const analyser = require('./assertion-analyser');
|
||
|
const EventEmitter = require('events').EventEmitter;
|
||
|
|
||
|
const Mocha = require('mocha'),
|
||
|
fs = require('fs'),
|
||
|
path = require('path');
|
||
|
require("@babel/register");
|
||
|
|
||
|
const mocha = new Mocha({ timeout: 5000 });
|
||
|
const testDir = './tests'
|
||
|
|
||
|
|
||
|
// Add each .js file to the mocha instance
|
||
|
fs.readdirSync(testDir).filter(function(file){
|
||
|
// Only keep the .js files
|
||
|
return file.substr(-3) === '.js';
|
||
|
|
||
|
}).forEach(function(file){
|
||
|
mocha.addFile(
|
||
|
path.join(testDir, file)
|
||
|
);
|
||
|
});
|
||
|
|
||
|
let emitter = new EventEmitter();
|
||
|
emitter.run = function() {
|
||
|
|
||
|
let tests = [];
|
||
|
let context = "";
|
||
|
let separator = ' -> ';
|
||
|
// Run the tests.
|
||
|
try {
|
||
|
let runner = mocha.ui('tdd').run()
|
||
|
.on('test end', function(test) {
|
||
|
// remove comments
|
||
|
let body = test.body.replace(/\/\/.*\n|\/\*.*\*\//g, '');
|
||
|
// collapse spaces
|
||
|
body = body.replace(/\s+/g,' ');
|
||
|
let obj = {
|
||
|
title: test.title,
|
||
|
context: context.slice(0, -separator.length),
|
||
|
state: test.state,
|
||
|
// body: body,
|
||
|
assertions: analyser(body)
|
||
|
};
|
||
|
tests.push(obj);
|
||
|
})
|
||
|
.on('end', function() {
|
||
|
emitter.report = tests;
|
||
|
emitter.emit('done', tests)
|
||
|
})
|
||
|
.on('suite', function(s) {
|
||
|
context += (s.title + separator);
|
||
|
|
||
|
})
|
||
|
.on('suite end', function(s) {
|
||
|
context = context.slice(0, -(s.title.length + separator.length))
|
||
|
})
|
||
|
} catch(e) {
|
||
|
throw(e);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
module.exports = emitter;
|
||
|
|
||
|
/*
|
||
|
* Mocha.runner Events:
|
||
|
* can be used to build a better custom report
|
||
|
*
|
||
|
* - `start` execution started
|
||
|
* - `end` execution complete
|
||
|
* - `suite` (suite) test suite execution started
|
||
|
* - `suite end` (suite) all tests (and sub-suites) have finished
|
||
|
* - `test` (test) test execution started
|
||
|
* - `test end` (test) test completed
|
||
|
* - `hook` (hook) hook execution started
|
||
|
* - `hook end` (hook) hook complete
|
||
|
* - `pass` (test) test passed
|
||
|
* - `fail` (test, err) test failed
|
||
|
* - `pending` (test) test pending
|
||
|
*/
|