3
3
var tape = require ( '../' ) ;
4
4
var tap = require ( 'tap' ) ;
5
5
var concat = require ( 'concat-stream' ) ;
6
+ var satisfies = require ( 'semver' ) . satisfies ;
6
7
7
8
var stripFullStack = require ( './common' ) . stripFullStack ;
8
9
@@ -32,17 +33,34 @@ tap.test('using a custom assertion', function (tt) {
32
33
' at Test.<anonymous> ($TEST/assertion.js:$LINE:$COL)' ,
33
34
' [... stack stripped ...]' ,
34
35
' ...' ,
36
+ typeof Promise === 'undefined'
37
+ ? '# SKIP custom assertion returns a promise'
38
+ : [ ] . concat (
39
+ '# custom assertion returns a promise' ,
40
+ 'ok ' + ++ count + ' promise rejected!' ,
41
+ 'not ok ' + ++ count + ' SyntaxError: expected promise to reject; it fulfilled' ,
42
+ ' ---' ,
43
+ ' operator: error' ,
44
+ ' stack: |-' ,
45
+ ' SyntaxError: expected promise to reject; it fulfilled' ,
46
+ ' at $TEST/assertion.js:$LINE:$COL' ,
47
+ satisfies ( process . version , '^8 || ^9' )
48
+ ? ' at <anonymous>'
49
+ : [ ] ,
50
+ ' [... stack stripped ...]' ,
51
+ ' ...'
52
+ ) ,
35
53
'' ,
36
54
'1..' + count ,
37
55
'# tests ' + count ,
38
- '# pass ' + ( count - 1 ) ,
39
- '# fail 1' ,
56
+ '# pass ' + ( count - ( typeof Promise === 'undefined' ? 1 : 2 ) ) ,
57
+ '# fail ' + ( typeof Promise === 'undefined' ? 1 : 2 ) ,
40
58
''
41
59
) ) ;
42
60
} ) ) ;
43
61
44
62
var isAnswer = function ( value , msg ) {
45
- // eslint-disable-next-line no-invalid-this
63
+
46
64
this . equal ( value , 42 , msg || 'value must be the answer to life, the universe, and everything' ) ;
47
65
} ;
48
66
@@ -54,4 +72,33 @@ tap.test('using a custom assertion', function (tt) {
54
72
55
73
t . end ( ) ;
56
74
} ) ;
75
+
76
+ var rejects = function assertRejects ( fn , expected , msg , extra ) {
77
+ var t = this ;
78
+ /* eslint no-invalid-this: 0 */
79
+ return new Promise ( function ( resolve ) { resolve ( fn ( ) ) ; } ) . then (
80
+ function ( ) {
81
+ throw new SyntaxError ( 'expected promise to reject; it fulfilled' ) ;
82
+ } ,
83
+ function ( err ) {
84
+ t [ 'throws' ] ( function ( ) { throw err ; } , expected , msg , extra ) ;
85
+ }
86
+ ) ;
87
+ } ;
88
+
89
+ test ( 'custom assertion returns a promise' , { skip : typeof Promise !== 'function' } , function ( t ) {
90
+ return Promise . all ( [
91
+ t . assertion (
92
+ rejects ,
93
+ function ( ) { return Promise . resolve ( ) ; } ,
94
+ SyntaxError ,
95
+ 'expected promise to reject; it fulfilled'
96
+ ) ,
97
+ t . assertion (
98
+ rejects ,
99
+ function ( ) { return Promise . reject ( new Error ( 'foo' ) ) ; } ,
100
+ 'promise rejected!'
101
+ )
102
+ ] ) ;
103
+ } ) ;
57
104
} ) ;
0 commit comments