What is a stub in Node.js ? (original) (raw)

Last Updated : 19 Aug, 2020

A small program routine that substitutes for a longer program which is possible to be loaded later or that is remotely located.

Features of stub:

Example:

javascript `

var fs = require('fs') var writeFileStub = sinon.stub(fs, 'writeFile', function (path, data, cb) {
return cb(null) })

expect(writeFileStub).to.be.called
writeFileStub.restore()

`

When to use stubs?

  1. Prevent a specific method from being called directly.
  2. Controlling method behavior down a specific path from a test to force the code. For example: Error handling.
  3. Replacing the problematic pieces of code.
  4. Testing asynchronous code easy.

Example To Create Asynchronous Stub That Throws An Exception:

javascript `

require("@fatso83/mini-mocha").install();

const sinon = require("sinon"); const PubSub = require("pubsub-js"); const referee = require("@sinonjs/referee"); const assert = referee.assert;

describe("PubSub", function() { it("Calling all the subscribers, irrespective of exceptions.", function() { const message = "an example message"; const stub = sinon.stub().throws(); const spy1 = sinon.spy(); const spy2 = sinon.spy(); const clock = sinon.useFakeTimers();

   PubSub.subscribe(message, stub);
   PubSub.subscribe(message, spy1);
   PubSub.subscribe(message, spy2);

   assert.exception(()=>{
       PubSub.publishSync(message, "some data");      
       clock.tick(1);
   });

   assert.exception(stub);
   assert(spy1.called);
   assert(spy2.called);
   assert(stub.calledBefore(spy1));

   clock.restore();

}); });

`

Output:

Calling all the subscribers, irrespective of exceptions.

Example Of Stubs: Let us consider an example of an e-commerce website for purchasing items. If we are successful a mail will be sent to the customer.

javascript `

const purchaseItems(cartItems, user)=>{ let payStatus = user.paymentMethod(cartItems) if (payStatus === "successful") { user.SuccessMail() } else { user.redirect("error_page_of_payment") } } }

function() {

// Mail will be send for successful payment. let paymentStub = sinon.stub().returns("successful") let mailStub = sinon.stub( let user = { paymentMethod: paymentStub, SuccessMail: mailStub }

purchaseItems([], user)

assert(mailStub.called) }

`

Example 1: A Simple Example To Execute Stubs.

html `

Page Title

html