@@ -24,20 +24,24 @@ Logs for debugging are outputted on test failure.
2424@param {Answers } o.inputAnswers Test input
2525@param {Record<string, Prompt> | Prompt[] } o.prompts Actual prompts
2626*/
27- const mockPrompt = async ( { t, inputAnswers, prompts} ) => {
28- const answers = { } ;
29-
30- // Ensure `prompts` is an object
27+ const getPromptsObject = prompts => {
3128 if ( Array . isArray ( prompts ) ) {
3229 const promptsObject = { } ;
3330
3431 for ( const prompt of prompts ) {
3532 promptsObject [ prompt . name ] = prompt ;
3633 }
3734
38- prompts = promptsObject ;
35+ return promptsObject ;
3936 }
4037
38+ return prompts ;
39+ } ;
40+
41+ const mockPrompt = async ( { t, inputAnswers, prompts} ) => {
42+ const answers = { } ;
43+ prompts = getPromptsObject ( prompts ) ;
44+
4145 t . log ( 'prompts:' , Object . keys ( prompts ) ) ;
4246
4347 /* eslint-disable no-await-in-loop */
@@ -193,19 +197,23 @@ Mocks `inquirer` for testing `source/ui.js`.
193197@param {ExecutionContext } o.t
194198@param {Answers } o.answers Test input
195199@param {import('esmock').MockMap } [o.mocks] Optional global mocks
200+ @param {(prompts: Record<string, Prompt>) => void } [o.onPrompt] Optional hook to inspect prompts
196201*/
197- export const mockInquirer = async ( { t, answers, mocks = { } } ) => {
202+ export const mockInquirer = async ( { t, answers, mocks = { } , onPrompt = ( ) => { } } ) => {
198203 /** @type {string[] } */
199204 const logs = [ ] ;
200205
201206 /** @type {import('../../source/ui.js') } */
202207 const ui = await esmock ( '../../source/ui.js' , import . meta. url , {
203208 inquirer : {
204209 async prompt ( prompts ) {
210+ const promptDescriptors = getPromptsObject ( prompts ) ;
211+ onPrompt ( promptDescriptors ) ;
212+
205213 let uiAnswers = { } ;
206214
207215 const assertions = await t . try ( async tt => {
208- uiAnswers = await mockPrompt ( { t : tt , inputAnswers : answers , prompts} ) ;
216+ uiAnswers = await mockPrompt ( { t : tt , inputAnswers : answers , prompts : promptDescriptors } ) ;
209217 } ) ;
210218
211219 assertions . commit ( { retainLogs : ! assertions . passed } ) ;
0 commit comments