mochajs / mocha-examples

Working examples of common configurations using mocha ☕️
https://mochajs.org
Apache License 2.0
201 stars 154 forks source link

🚀 Example: Stubbing Node globals with sinon #69

Open PreethiVuchuru27916 opened 1 year ago

PreethiVuchuru27916 commented 1 year ago

I have a file fele.js that specifies all commands that my app needs.

Command Used - Just says hello world when hello is entered.

const program = new commander.Command();
const helloCommand = program.command('hello');
helloCommand
    .action(async(options) => {
       console.log("Hello World"); //Works well as 
        return "Hello World";//But this does not work. 
    })

Now I am using Mocha to test the command. PFB Code

const assert = require('assert');
const { spawn } = require('child_process');
const path = require('path');

describe('Hello Command', function() {
  it('should output a greeting message', function(done) {
    const expectedOutput = 'Hello World\n';
    const cliPath = path.join(__dirname,'fele.js'); 
    const process = spawn('node', [cliPath, 'hello']);
    let actual = '';
    process.stdout.on('data', data => {
      actual += data.toString();
    });
    process.on('close', () => {
      assert.strictEqual(output, expectedOutput);
      done();
    });
  });
});

Please do suggest me an approach with which I can be able to get not only by using console.log but also by using return statement. Like process.stdout.on works for console.log statements, suggest me some thing that works for a process's method return value.

JoshuaKGoldberg commented 2 months ago

I'm surprised there isn't already a set of examples with Sinon.JS! +1 to showing how to use that for things like:

sinon.stub(process, 'exit');