@@ -23,25 +23,26 @@ export function expect(step: Step, actual: Object | void, previous?: Object): Re
2323 result . completion = Completion . succeeded ;
2424 for ( const expectation of step . expected ?? [ ] ) {
2525 for ( const [ field , entry ] of Object . entries ( expectation ) ) {
26- const value = getValue ( actual , field ) ;
27- if ( value === undefined ) {
26+ try {
27+ const value = getValue ( actual , field ) ;
28+
29+ if ( entry . kind === 'primitive' ) {
30+ result . expectPrimitive ( value , entry . value ) ;
31+ } else if ( entry . kind === 'description' ) {
32+ result . expectDescription ( value , entry . value ) ;
33+ } else if ( entry . kind === 'comparison' ) {
34+ result . expectComparison ( actual , value , entry . value , entry . message ) ;
35+ } else if ( entry . kind === 'behaviour' ) {
36+ if ( previous === undefined ) {
37+ result . error ( 'Invalid test: no [previous] to compare behaviour to.' ) ;
38+ return result ;
39+ }
40+ result . expectBehaviour ( value , getValue ( previous , field ) , entry . value ) ;
41+ }
42+ } catch ( e ) {
2843 result . error ( `Failure: ${ JSON . stringify ( actual ) } state does not contain '${ field } '.` ) ;
2944 return result ;
3045 }
31-
32- if ( entry . kind === 'primitive' ) {
33- result . expectPrimitive ( value , entry . value ) ;
34- } else if ( entry . kind === 'description' ) {
35- result . expectDescription ( value , entry . value ) ;
36- } else if ( entry . kind === 'comparison' ) {
37- result . expectComparison ( actual , value , entry . value , entry . message ) ;
38- } else if ( entry . kind === 'behaviour' ) {
39- if ( previous === undefined ) {
40- result . error ( 'Invalid test: no [previous] to compare behaviour to.' ) ;
41- return result ;
42- }
43- result . expectBehaviour ( value , getValue ( previous , field ) , entry . value ) ;
44- }
4546 }
4647 }
4748 return result ;
0 commit comments