@@ -2,21 +2,15 @@ const debug = require('debug')('codeceptjs:steps')
22const event = require ( '../event' )
33const store = require ( '../store' )
44const output = require ( '../output' )
5- const { BeforeHook, AfterHook, BeforeSuiteHook, AfterSuiteHook } = require ( '../mocha/hooks' )
65
76let currentTest
87let currentHook
98
109/**
11- * Register steps inside tests
1210 */
1311module . exports = function ( ) {
14- event . dispatcher . on ( event . test . before , test => {
15- test . startedAt = + new Date ( )
16- test . artifacts = { }
17- } )
18-
1912 event . dispatcher . on ( event . test . started , test => {
13+ test . startedAt = + new Date ( )
2014 currentTest = test
2115 currentTest . steps = [ ]
2216 if ( ! ( 'retryNum' in currentTest ) ) currentTest . retryNum = 0
@@ -36,13 +30,13 @@ module.exports = function () {
3630
3731 output . hook . started ( hook )
3832
39- if ( hook . ctx && hook . ctx . test ) debug ( `--- STARTED ${ hook . ctx . test . title } ---` )
33+ if ( hook . ctx && hook . ctx . test ) debug ( `--- STARTED ${ hook . title } ---` )
4034 } )
4135
4236 event . dispatcher . on ( event . hook . passed , hook => {
4337 currentHook = null
4438 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 } ---` )
4640 } )
4741
4842 event . dispatcher . on ( event . test . failed , ( ) => {
@@ -88,4 +82,61 @@ module.exports = function () {
8882 store . currentStep = null
8983 store . stepOptions = null
9084 } )
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
91142}
0 commit comments