MCPcopy Index your code
hub / github.com/codeceptjs/CodeceptJS / run

Method run

lib/step/meta.js:57–113  ·  view source on GitHub ↗

@return {*}

(fn)

Source from the content-addressed store, hash-verified

55
56 /** @return {*} */
57 run(fn) {
58 this.status = 'queued'
59 this.setArguments(Array.from(arguments).slice(1))
60 let result
61 let hasChildSteps = false
62
63 const registerStep = step => {
64 this.setMetaStep(null)
65 step.setMetaStep(this)
66 hasChildSteps = true
67 }
68 event.dispatcher.prependListener(event.step.before, registerStep)
69
70 // Start timing
71 this.startTime = Date.now()
72
73 // Handle async and sync methods.
74 if (fn.constructor.name === 'AsyncFunction') {
75 result = fn
76 .apply(this.context, this.args)
77 .then(result => {
78 this.setStatus('success')
79 return result
80 })
81 .catch(error => {
82 this.setStatus('failed')
83 throw error
84 })
85 .finally(() => {
86 this.endTime = Date.now()
87 event.dispatcher.removeListener(event.step.before, registerStep)
88 // Only emit events if no child steps were registered
89 if (!hasChildSteps) {
90 event.emit(event.step.started, this)
91 event.emit(event.step.finished, this)
92 }
93 })
94 } else {
95 try {
96 result = fn.apply(this.context, this.args)
97 this.setStatus('success')
98 } catch (error) {
99 this.setStatus('failed')
100 throw error
101 } finally {
102 this.endTime = Date.now()
103 event.dispatcher.removeListener(event.step.before, registerStep)
104 // Only emit events if no child steps were registered
105 if (!hasChildSteps) {
106 event.emit(event.step.started, this)
107 event.emit(event.step.finished, this)
108 }
109 }
110 }
111
112 return result
113 }
114}

Callers

nothing calls this directly

Calls 2

setArgumentsMethod · 0.80
setStatusMethod · 0.80

Tested by

no test coverage detected