I am trying to test a terminal application I wrote in node.js that asks the user to press keys. After a day of searching, I can't figure out how to get a test script to "press a key".
I finally found something promising in the docs for the readline module.
rl.write allows one to pass a key argument instead of a string. It even says explicitly, "The rl.write() method will write the data to the readline Interface's input as if it were provided by the user."
So I have the following:
const readline = require('readline');
const rl_interface = readline.createInterface({
input: process.stdin,
output: process.stdout
});
readline.emitKeypressEvents(rl_interface.input);
rl_interface.input.setRawMode(true);
rl_interface.input.on('keypress', (str, key) => {
console.log('data receieved')
rl_interface.close();
})
rl_interface.write(null, { name:'g' });
I expect the last line to fire the keypress event, log "data received", and close out of the program. But this doesn't happen.
What am I missing here?