What is a test?
A test is code that throws an error when the actual result of something does not match the expected output.
const sum = (a, b) => a + b;
const subtract = (a, b) => a - b;
let result, expected;
result = sum(3, 7);
expected = 10;
if (result !== expected) {
throw new Error(`${result} is not equal to ${expected}`);
}
result = subtract(7, 3);
expected = 4;
if (result !== expected) {
throw new Error(`${result} is not equal to ${expected}`);
}
The actual !== expected
part is called an assertion. The above custom tests code could be rewritten as a real test that could be run with Jest.
File: tests/test-introdution/base.test.js
const sum = (a, b) => a + b;
const subtract = (a, b) => a - b;
test("Should sum", () => {
expect(sum(3, 7)).toEqual(10);
});
test("Should subtract", () => {
expect(subtract(7, 3)).toEqual(4);
});
the output generated by Jest is the following:
PASS tests/test-introdution/base.test.js
✓ Should sum (1ms)
✓ Should subtract
Test Suites: 1 passed, 1 total
Tests: 2 passed, 2 total
Snapshots: 0 total
Time: 0.08s, estimated 1s
If you'd like to run it on your local machine, follow the instructions of the guide.
Note that, usually, the testing frameworks allow you to write the test using the global test()
or it()
functions. The tests are usually grouped in describe
(or context
, again, it depends on the framework) functions
File: tests/test-introdution/describe.test.js
const sum = (a, b) => a + b;
const subtract = (a, b) => a - b;
describe("Math operations", () => {
test("Should sum", () => {
expect(sum(3, 7)).toEqual(10);
});
test("Should subtract", () => {
expect(subtract(7, 3)).toEqual(4);
});
});
PASS tests/test-introdution/describe.test.js
Math operations
✓ Should sum (1ms)
✓ Should subtract
Test Suites: 1 passed, 1 total
Tests: 2 passed, 2 total
Snapshots: 0 total
Time: 0.072s, estimated 1s
When you need to run only a particular test or skip some of them, you can call the test.only()
of test.skip()
utilities
File: tests/test-introdution/only.test.js
const sum = (a, b) => a + b;
const subtract = (a, b) => a - b;
describe("Math operations", () => {
test.only("Should sum", () => {
expect(sum(3, 7)).toEqual(10);
});
test("Should subtract", () => {
expect(subtract(7, 3)).toEqual(4);
});
});
PASS tests/test-introdution/only.test.js
Math operations
✓ Should sum (2ms)
○ skipped Should subtract
Test Suites: 1 passed, 1 total
Tests: 1 skipped, 1 passed, 2 total
Snapshots: 0 total
Time: 0.066s, estimated 1s
File: tests/test-introdution/skip.test.js
const sum = (a, b) => a + b;
const subtract = (a, b) => a - b;
describe("Math operations", () => {
test.skip("Should sum", () => {
expect(sum(3, 7)).toEqual(10);
});
test("Should subtract", () => {
expect(subtract(7, 3)).toEqual(4);
});
});
PASS tests/test-introdution/skip.test.js
Math operations
✓ Should subtract (1ms)
○ skipped Should sum
Test Suites: 1 passed, 1 total
Tests: 1 skipped, 1 passed, 2 total
Snapshots: 0 total
Time: 0.066s, estimated 1s
You can even run some common operations leveraging the before
, after
, beforeEach
, and afterEach
function hooks
File: tests/test-introdution/after-each.test.js
const sum = (a, b) => a + b;
const subtract = (a, b) => a - b;
describe("Math operations", () => {
let i = 0;
afterEach(() => {
i++;
console.log(`${i} tests run`);
});
test("Should sum", () => {
expect(sum(3, 7)).toEqual(10);
});
test("Should subtract", () => {
expect(subtract(7, 3)).toEqual(4);
});
});
PASS tests/test-introdution/after-each.test.js
Math operations
✓ Should sum (1ms)
✓ Should subtract (1ms)
console.log tests/test-introdution/after-each.test.js:8
1 tests run
console.log tests/test-introdution/after-each.test.js:8
2 tests run
Test Suites: 1 passed, 1 total
Tests: 2 passed, 2 total
Snapshots: 0 total
Time: 0.311s, estimated 1s
Author: Stefano Magni