Test Promises Using Async and Await
Learn to test Promises using async and await.
We'll cover the following...
In everyday work, we often need to deal with Promises (MDN article). Jasmine allows for a straightforward way of testing these using async
and await
(MDN article)
The ArticleDelete
class
What follows is a very simplified example of a class that handles deleting articles in a browser application. It accepts some input and makes a request to a server API if conditions are met.
For this lesson, the
ArticleAPI
methods are considered returning instances ofPromise
. So, thedelete
method returns aPromise
.
Run the code playground below and see the breakdown below.
const specReporter = require('jasmine-spec-reporter').SpecReporter module.exports = { srcDir: "src", srcFiles: [ "**/*.?(m)js" ], specDir: "spec", specFiles: [ "**/*[sS]pec.?(m)js" ], helpers: [ "helpers/**/*.?(m)js" ], random: false, stopSpecOnExpectationFailure: false, browser: { name: "headlessChrome" }, reporters: [new specReporter()] }
ArticleDelete
class breakdown
The ArticleDelete
class is relying on the ArticleAPI
class to make a DELETE /api/article/:id
call if conditions are met.
-
ArticleAPI
is a class that would implement the server API call. It’s empty above because that’s outside of the current lesson scope, and we’ll be mocking its responses for the tests. -
ArticleDelete
is the main class. Its breakdown is below:-
import { ArticleAPI } from './article-api.mjs';
This line imports the
ArticleAPI
dependency from the adjacent module in the current folder,article-api.mjs
. -
export class ArticleDelete {
This line declares and exports the class to be used in other modules.
-
/** @type {ArticleAPI} */ articleAPI; /** * @param { ArticleAPI } article the article api */ constructor(articleApi) { this.articleAPI = articleApi; }
These lines declare the
articleAPI
property and populates it when an instance of the class gets constructed. In other ...
-