|
| 1 | +'use strict'; |
| 2 | +const assert = require('assert'); |
| 3 | +require('../common'); |
| 4 | + |
| 5 | +/** |
| 6 | + * Checks the expected invocations against the invocations that actually |
| 7 | + * occurred. |
| 8 | + * |
| 9 | + * @name checkInvocations |
| 10 | + * @function |
| 11 | + * @param {Object} activity including timestamps for each life time event, |
| 12 | + * i.e. init, before ... |
| 13 | + * @param {Object} hooks the expected life time event invocations with a count |
| 14 | + * indicating how oftn they should have been invoked, |
| 15 | + * i.e. `{ init: 1, before: 2, after: 2 }` |
| 16 | + * @param {String} stage the name of the stage in the test at which we are |
| 17 | + * checking the invocations |
| 18 | + */ |
| 19 | +exports.checkInvocations = function checkInvocations(activity, hooks, stage) { |
| 20 | + const stageInfo = `Checking invocations at stage "${stage}":\n `; |
| 21 | + |
| 22 | + assert.ok(activity != null, |
| 23 | + `${stageInfo} Trying to check invocation for an activity, ` + |
| 24 | + 'but it was empty/undefined.' |
| 25 | + ); |
| 26 | + |
| 27 | + // Check that actual invocations for all hooks match the expected invocations |
| 28 | + [ 'init', 'before', 'after', 'destroy' ].forEach(checkHook); |
| 29 | + |
| 30 | + function checkHook(k) { |
| 31 | + const val = hooks[k]; |
| 32 | + // Not expected ... all good |
| 33 | + if (val == null) return; |
| 34 | + |
| 35 | + if (val === 0) { |
| 36 | + // Didn't expect any invocations, but it was actually invoked |
| 37 | + const invocations = activity[k].length; |
| 38 | + const msg = `${stageInfo} Called "${k}" ${invocations} time(s), ` + |
| 39 | + 'but expected no invocations.'; |
| 40 | + assert(activity[k] === null && activity[k] === undefined, msg); |
| 41 | + } else { |
| 42 | + // Expected some invocations, make sure that it was invoked at all |
| 43 | + const msg1 = `${stageInfo} Never called "${k}", ` + |
| 44 | + `but expected ${val} invocation(s).`; |
| 45 | + assert(activity[k] !== null && activity[k] !== undefined, msg1); |
| 46 | + |
| 47 | + // Now make sure that the expected count and |
| 48 | + // the actual invocation count match |
| 49 | + const msg2 = `${stageInfo} Called "${k}" ${activity[k].length} ` + |
| 50 | + `time(s), but expected ${val} invocation(s).`; |
| 51 | + assert.strictEqual(activity[k].length, val, msg2); |
| 52 | + } |
| 53 | + } |
| 54 | +}; |
0 commit comments