TestRunner: Recognize error as failure

master v2.10.1
Mike Gerwitz 2018-02-23 15:45:54 -05:00
parent 7475b5b928
commit 2f7ad95a2c
2 changed files with 70 additions and 7 deletions

View File

@ -134,7 +134,7 @@ module.exports = Class( 'TestRunner',
'private _runTest'( { description: desc, data, expect }, test_i, total )
{
// no input map---#rate uses params directly
const result = this._program.rater( data ).vars;
const result = this._tryRun( data );
const cmp = Object.keys( expect ).map(
field => [
@ -143,12 +143,18 @@ module.exports = Class( 'TestRunner',
]
);
const failures = cmp.filter( ( [ , ok ] ) => !ok )
.map( ( [ field ] ) => ( {
field: field,
expect: expect[ field ],
result: result[ field ],
} ) );
const failures = ( result instanceof Error )
? [ {
field: "error",
expect: "",
result: result.message,
} ]
: cmp.filter( ( [ , ok ] ) => !ok )
.map( ( [ field ] ) => ( {
field: field,
expect: expect[ field ],
result: result[ field ],
} ) );
const succeeded = cmp.length - failures.length;
@ -167,6 +173,30 @@ module.exports = Class( 'TestRunner',
},
/**
* Attempt test case, returning error on failure
*
* If an error is thrown (e.g. terminating classification), it will be
* returned in place of the results.
*
* @param {Object} data input data
*
* @return {Object|Error} result or error
*/
'private _tryRun'( data )
{
// no input map---#rate uses params directly
try
{
return this._program.rater( data ).vars;
}
catch( e )
{
return e;
}
},
/**
* Recursively compare values (scalar, array)
*

View File

@ -147,4 +147,37 @@ describe( "TestRunner", () =>
{ description: '', data: {}, expect: {} },
] );
} );
// exceptions are thrown by terminating classifications
it( "recognizes exception as failure", () =>
{
const error_msg = [ "test failure 0", "test failure 1" ];
const program = {
rater( data )
{
throw Error( error_msg.shift() );
}
};
return Sut( NullTestReporter(), program )
.runTests( [
{ description: '', data: {}, expect: {} },
{ description: '', data: {}, expect: {} },
] )
.then( results =>
{
results.forEach( ( { failures }, i ) =>
expect( failures )
.to.deep.equal( [
{
field: "error",
expect: "",
result: `test failure ${i}`,
},
] )
);
} );
} );
} );