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

Function within

lib/effects.js:15–78  ·  view source on GitHub ↗

* @param {CodeceptJS.LocatorOrString} context * @param {Function} fn * @return {Promise<*> | undefined}

(context, fn)

Source from the content-addressed store, hash-verified

13 * @return {Promise<*> | undefined}
14 */
15function within(context, fn) {
16 const helpers = store.dryRun ? {} : container.helpers()
17 const locator = typeof context === 'object' ? JSON.stringify(context) : context
18
19 return recorder.add(
20 'register within wrapper',
21 () => {
22 const metaStep = new WithinStep(locator, fn)
23 const defineMetaStep = step => (step.metaStep = metaStep)
24 recorder.session.start('within')
25
26 event.dispatcher.prependListener(event.step.before, defineMetaStep)
27
28 Object.keys(helpers).forEach(helper => {
29 if (helpers[helper]._withinBegin) recorder.add(`[${helper}] start within`, () => helpers[helper]._withinBegin(context))
30 })
31
32 const finalize = () => {
33 event.dispatcher.removeListener(event.step.before, defineMetaStep)
34 recorder.add('Finalize session within session', () => {
35 output.stepShift = 1
36 recorder.session.restore('within')
37 })
38 }
39 const finishHelpers = () => {
40 Object.keys(helpers).forEach(helper => {
41 if (helpers[helper]._withinEnd) recorder.add(`[${helper}] finish within`, () => helpers[helper]._withinEnd())
42 })
43 }
44
45 if (isAsyncFunction(fn)) {
46 return fn()
47 .then(res => {
48 finishHelpers()
49 finalize()
50 return recorder.promise().then(() => res)
51 })
52 .catch(e => {
53 finishHelpers()
54 finalize()
55 recorder.throw(e)
56 return recorder.promise()
57 })
58 }
59
60 let res
61 try {
62 res = fn()
63 } catch (err) {
64 recorder.throw(err)
65 } finally {
66 finishHelpers()
67 recorder.catch(err => {
68 output.stepShift = 1
69 throw err
70 })
71 }
72 finalize()

Callers 6

session_test.jsFile · 0.90
within_test.jsFile · 0.85
github_test.jsFile · 0.85

Calls 8

isAsyncFunctionFunction · 0.90
finishHelpersFunction · 0.85
helpersMethod · 0.80
finalizeFunction · 0.70
fnFunction · 0.50
addMethod · 0.45
startMethod · 0.45
_withinBeginMethod · 0.45

Tested by

no test coverage detected