MCPcopy
hub / github.com/codeceptjs/CodeceptJS / recordStep

Function recordStep

lib/step/record.js:9–80  ·  view source on GitHub ↗
(step, args)

Source from the content-addressed store, hash-verified

7import retryStep from './retry.js'
8import { fixErrorStack } from '../utils/typescript.js'
9function recordStep(step, args) {
10 step.status = 'queued'
11
12 // apply step configuration
13 const lastArg = args[args.length - 1]
14 if (StepConfig.isStepConfig(lastArg)) {
15 const stepConfig = args.pop()
16 const { opts, timeout, retry } = stepConfig.getConfig()
17
18 if (opts) {
19 output.debug(`Step ${step.title}: options applied ${JSON.stringify(opts)}`)
20 store.stepOptions = opts
21 step.opts = opts
22 }
23 if (timeout) {
24 output.debug(`Step ${step.title} timeout ${timeout}s`)
25 step.setTimeout(timeout * 1000, TIMEOUT_ORDER.codeLimitTime)
26 }
27 if (retry) retryStep(retry)
28 }
29
30 step.setArguments(args)
31 // run async before step hooks
32 event.emit(event.step.before, step)
33
34 const task = `${step.title}: ${step.humanizeArgs()}`
35 let val
36
37 // run step inside promise
38 recorder.add(
39 task,
40 () => {
41 if (!step.startTime) {
42 // step can be retries
43 event.emit(event.step.started, step)
44 step.startTime = +Date.now()
45 }
46 return (val = step.run(...args))
47 },
48 false,
49 undefined,
50 step.timeout,
51 )
52
53 event.emit(event.step.after, step)
54
55 recorder.add('step passed', () => {
56 step.endTime = +Date.now()
57 event.emit(event.step.passed, step, val)
58 event.emit(event.step.finished, step)
59 })
60
61 recorder.catch(err => {
62 step.status = 'failed'
63 step.endTime = +Date.now()
64
65 // Fix error stack to point to original .ts files (lazy import to avoid circular dependency)
66 const fileMapping = store.tsFileMapping

Callers 4

sayMethod · 0.85
actor.jsFile · 0.85
executeStepFunction · 0.85
addToRecorderMethod · 0.85

Calls 11

fixErrorStackFunction · 0.90
retryStepFunction · 0.85
isStepConfigMethod · 0.80
popMethod · 0.80
debugMethod · 0.80
setTimeoutMethod · 0.80
setArgumentsMethod · 0.80
humanizeArgsMethod · 0.80
getConfigMethod · 0.45
addMethod · 0.45
runMethod · 0.45

Tested by

no test coverage detected