@@ -2,21 +2,15 @@ const debug = require('debug')('codeceptjs:steps')
2
2
const event = require ( '../event' )
3
3
const store = require ( '../store' )
4
4
const output = require ( '../output' )
5
- const { BeforeHook, AfterHook, BeforeSuiteHook, AfterSuiteHook } = require ( '../mocha/hooks' )
6
5
7
6
let currentTest
8
7
let currentHook
9
8
10
9
/**
11
- * Register steps inside tests
12
10
*/
13
11
module . exports = function ( ) {
14
- event . dispatcher . on ( event . test . before , test => {
15
- test . startedAt = + new Date ( )
16
- test . artifacts = { }
17
- } )
18
-
19
12
event . dispatcher . on ( event . test . started , test => {
13
+ test . startedAt = + new Date ( )
20
14
currentTest = test
21
15
currentTest . steps = [ ]
22
16
if ( ! ( 'retryNum' in currentTest ) ) currentTest . retryNum = 0
@@ -36,13 +30,13 @@ module.exports = function () {
36
30
37
31
output . hook . started ( hook )
38
32
39
- if ( hook . ctx && hook . ctx . test ) debug ( `--- STARTED ${ hook . ctx . test . title } ---` )
33
+ if ( hook . ctx && hook . ctx . test ) debug ( `--- STARTED ${ hook . title } ---` )
40
34
} )
41
35
42
36
event . dispatcher . on ( event . hook . passed , hook => {
43
37
currentHook = null
44
38
output . hook . passed ( hook )
45
- if ( hook . ctx && hook . ctx . test ) debug ( `--- ENDED ${ hook . ctx . test . title } ---` )
39
+ if ( hook . ctx && hook . ctx . test ) debug ( `--- ENDED ${ hook . title } ---` )
46
40
} )
47
41
48
42
event . dispatcher . on ( event . test . failed , ( ) => {
@@ -88,4 +82,61 @@ module.exports = function () {
88
82
store . currentStep = null
89
83
store . stepOptions = null
90
84
} )
85
+
86
+ // listeners to output steps
87
+ let currentMetaStep = [ ]
88
+
89
+ event . dispatcher . on ( event . bddStep . started , step => {
90
+ if ( ! printSteps ( ) ) return
91
+
92
+ output . stepShift = 2
93
+ output . step ( step )
94
+ } )
95
+
96
+ event . dispatcher . on ( event . step . started , step => {
97
+ if ( ! printSteps ( ) ) return
98
+
99
+ let processingStep = step
100
+ const metaSteps = [ ]
101
+ let isHidden = false
102
+ while ( processingStep . metaStep ) {
103
+ metaSteps . unshift ( processingStep . metaStep )
104
+ processingStep = processingStep . metaStep
105
+ if ( processingStep . collapsed ) isHidden = true
106
+ }
107
+ const shift = metaSteps . length
108
+
109
+ for ( let i = 0 ; i < Math . max ( currentMetaStep . length , metaSteps . length ) ; i ++ ) {
110
+ if ( currentMetaStep [ i ] !== metaSteps [ i ] ) {
111
+ output . stepShift = 3 + 2 * i
112
+ if ( ! metaSteps [ i ] ) continue
113
+ // bdd steps are handled by bddStep.started
114
+ if ( metaSteps [ i ] . isBDD ( ) ) continue
115
+ output . step ( metaSteps [ i ] )
116
+ }
117
+ }
118
+ currentMetaStep = metaSteps
119
+
120
+ if ( isHidden ) return
121
+ output . stepShift = 3 + 2 * shift
122
+ output . step ( step )
123
+ } )
124
+
125
+ event . dispatcher . on ( event . step . finished , ( ) => {
126
+ if ( ! printSteps ( ) ) return
127
+ output . stepShift = 0
128
+ } )
129
+ }
130
+
131
+ let areStepsPrinted = false
132
+ function printSteps ( ) {
133
+ if ( output . level ( ) < 1 ) return false
134
+
135
+ // if executed first time, print debug message
136
+ if ( ! areStepsPrinted ) {
137
+ debug ( 'Printing steps' , 'Output level' , output . level ( ) )
138
+ areStepsPrinted = true
139
+ }
140
+
141
+ return true
91
142
}
0 commit comments