Complete Course

JavaScript for QAs

The language your tests are written in, from the ground up: types, variables, operators, functions, conditionals, loops, iterators, destructuring, and async/await. Every topic is taught in plain JavaScript first, then applied to real test code.

~5 hours of content

View Lessons

Course Content

16 comprehensive lessons covering everything you need to know

Introduction

Introduction
Course Structure
Learn how the course is organized and make the most of the content.
Introduction
Prerequisites
Systems and knowledge required to complete the course. No Docker, and no programming background needed.
Introduction
How you will practice
Your repository starts empty. You write the code, run it with Node.js, commit it, and push it to your own fork.
Lesson
Lesson 1
Fork, clone, and run your first file
Fork the empty project, clone it, write your first JavaScript file, run it with Node.js, and push your first commit.

JavaScript building blocks

Lesson
Lesson 2
Data types
The primitives (undefined, null, Boolean, Number, String) and the structural types (Array, Object, Function) every test is built out of.
Lesson
Lesson 3
Variables
var, let, and const, starting with primitives and then with arrays and objects, where const stops meaning what you expect.
Lesson
Lesson 4
Operators
Assignment, maths, and logic, including the == versus === difference that decides whether your assertion is telling the truth.
Lesson
Lesson 5
Strings: concatenation and template literals
Joining text with + and with backticks, and writing test names and failure messages that say which case failed.
Lesson
Lesson 6
Data transformation
toString, split, reverse, join, replace, replaceAll, slice, trim, toLowerCase, and toUpperCase, applied to text read off a page.

Structure and flow

Lesson
Lesson 7
Functions
Declarations, arrow functions, pure versus impure, and higher-order functions, which is what every it() and beforeEach() really is.
Lesson
Lesson 8
Modules: export and import
Split your code into files, export what you wrote, and import it somewhere else, which is how helpers and test data get shared.
Lesson
Lesson 9
Conditionals
if, else if, else, and the ternary, plus why a conditional inside a test is usually a warning sign.
Lesson
Lesson 10
Loops
for, for...of, and while, and the difference between looping inside one test and generating many tests.
Lesson
Lesson 11
Array iterators
forEach, map, filter, find, some, and every, and how one array of test data turns into a whole set of tests.

Working with data

Lesson
Lesson 12
Destructuring
Pulling values out of arrays and objects by position and by name, the way you unpack an API response body.
Lesson
Lesson 13
Rest and spread
The same three dots doing two opposite jobs, and how they build a test payload that differs from the default by one field.
Lesson
Lesson 14
JSON
JSON.parse and JSON.stringify, what JSON cannot hold, and why a fixture file loaded once can break the test that runs after it.

Asynchronous JavaScript and paradigms

Lesson
Lesson 15
Promises and async/await
What a promise is, what await does, and why an API call without await passes a test that never actually ran.
Lesson
Lesson 16
Object-oriented versus functional JavaScript
The same helper written as a class and as plain functions, and why the simpler one is the better default for test code.

Bonus & Conclusion

Bonus
Bonus: JavaScript in the browser console
querySelector, querySelectorAll, and the handful of DevTools console commands that make finding a selector a ten-second job.
Bonus
Bonus: useful libraries for testers
Faker.js for test data and Lodash for the array and object work you would otherwise hand-write, plus when not to reach for them.
Bonus
Bonus: a first look at TypeScript
TypeScript as syntax sugar over the JavaScript you just learned: types on variables, parameters, and return values, and what it catches.
Bonus
Bonus: coding questions in QA interviews
The exercises QA candidates are actually given, all solvable with this course's content, and what the interviewer is really marking.
Conclusion
Congratulations!
You've completed the JavaScript for QAs course!