Javascript – Jasmine Unit Tests for Promise Object

0
This article represents tips and code samples in relation with how to write unit tests for Promise object when using Jasmine framework. Please feel free to comment/suggest if I missed to mention one or more important points. Also, sorry for the typos.
Following are the key points described later in this article:

  • Sample Promise Object
  • Unit Tests related with Promise Object
Sample Promise Object

Pay attention to some of the following in the code below:

  • Auth module returns a Promise object that returns a User object when resolved or returns an error object in case of error.
  • A JSON object is passed to resolve or reject method.
  • Save the file as Auth.js within lib folder.
// Promise needs to be imported when executing a module using Node
//
var Promise = require("promise");

function Auth() {
}

Auth.prototype.login = function(user) {
    return new Promise(function(resolve, reject) {
        if(user.username != "" && user.password != "") {
            resolve({username: user.username, age: 40, location: "Hyderabad", firstname: "Ajitesh", lastname: "Shukla"});
        } else {
            if(user.username == ""){
                reject({status:1, message: "Username is invalid"});
            } else {
                reject({status:2, message: "Password is invalid"});
            }
        }
    });
}

module.exports = Auth;
Unit Tests related with Promise Object

Pay attention to some of the following in the code below:

  • “done” is passed as argument to each of the “it” or test method.
  • Assertion is made within success or error function
  • After assertion, “done()” method is called.
  • Save the file as AuthSpec.js in spec folder.
describe("Auth", function() {
  var Auth = require('../lib/Auth');
  var auth;

  beforeEach(function() {
    auth = new Auth();
  });

  it("fails with Username as invalid", function(done) {
    var loginPromise = auth.login({username: '', password: 'pass123'});
    loginPromise.then(function(response){
    },function(error){
        expect(error.status).toEqual(1);
        done();
    });
  });

  it("fails with Password as invalid", function(done) {
    var loginPromise = auth.login({username: 'ashukla', password: ''});
    loginPromise.then(function(response){
    },function(error){
        expect(error.status).toEqual(2);
        done();
    });
  });

  it("is successful", function(done) {
    var loginPromise = auth.login({username: 'ashukla', password: 'pass123'});
    loginPromise.then(function(response){
        expect(response.username).toEqual("ashukla");
        expect(response.firstname).toEqual("Ajitesh");
        expect(response.age).toEqual(40);
        done();
    },function(error){
    });
  });
});

 

Ajitesh Kumar

Ajitesh Kumar

Ajitesh is passionate about various different technologies including programming languages such as Java/JEE, Javascript, PHP, C/C++, mobile programming languages etc, and, computing fundamentals related with cloud-native technologies, application security, cloud computing platforms, mobile apps, big data etc.

He has also authored the book, Building Web Apps with Spring 5 and Angular.
Ajitesh Kumar

Leave A Reply

Time limit is exhausted. Please reload the CAPTCHA.