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){
});
});
});
Latest posts by Ajitesh Kumar (see all)
- Agentic Reasoning Design Patterns in AI: Examples - October 18, 2024
- LLMs for Adaptive Learning & Personalized Education - October 8, 2024
- Sparse Mixture of Experts (MoE) Models: Examples - October 6, 2024
I found it very helpful. However the differences are not too understandable for me