##### Automated test in JS ```javascript= // Actual Code const sum = (a, b) => a - b; // Testing Code const result = sum(3, 7); let expected = 10; // Assertion if (result !== expected) { throw new Error(`${result} is not equal to ${expected}`); } ``` --- ##### Output ![](https://i.imgur.com/1VEqIo7.png) --- ##### Abstract functionalty in separate file ```javascript= //math.js const sum = (a, b) => a - b; const subtract = (a, b) => a - b; module.exports = { sum, subtract }; ``` --- ##### Assertion library: v1.1 ```javascript= //assertion-library.js const {sum, subtract} = require('../math') // Testing sum function let result = sum(3, 7); let expected = 10; if (result !== expected) { throw new Error(`${result} is not equal to ${expected}`); } // Testing subtract function result = subtract(7, 3) expected = 4 // duplicate code (candidate for abstraction) if (result !== expected) { throw new Error(`${result} is not equal to ${expected}`); } ``` --- ##### Assertion library: v1.2 ```javascript= //assertion-library.js ... function expect(actual){ } ``` --- ##### Assertion library: v1.3 ```javascript= //assertion-library.js ... // usage expect(result).toBe(expected) ... function expect(actual) { return { toBe(expected) { } } } ``` --- ##### Assertion library: v1.4 ```javascript= //assertion-library.js ... function expect(actual) { return { toBe(expected) { if (actual !== expected) { throw new Error(`${actual} is not equal to ${expected}`) } } } } ``` --- ##### Assertion library: v1.5 ```javascript= //assertion-library.js ... // test sum result = sum(3, 7) expected = 10 expect(result).toBe(expected) // test subtract result = subtract(7, 3) expected = 4 expect(result).toBe(expected) ... ``` --- ##### Output ![](https://i.imgur.com/bw9xWgB.png) --- ##### Extending Assertion library ```javascript= //assertion-library.js ... function expect(actual) { return { toBe(expected) { if (actual !== expected) { throw new Error(`${actual} is not equal to ${expected}`); } }, toBeGreaterThan(expected) { if (actual <= expected) { throw new Error(`${actual} is not greater than ${expected}`); } } } } ``` --- ##### Improve Assertion Library 1.1 ```javascript= //assertion-library.js ... // test sum result = sum(3, 7) expected = 10 expect(result).toBe(expected) // this should fail // test subtract result = subtract(7, 3) expected = 4 expect(result).toBe(expected // this should also fail ... ``` --- ##### Output (only 1 fail and code breaks) ![](https://i.imgur.com/bw9xWgB.png) --- ##### Improve Assertion Library V1.2 ```javascript= //assertion-library.js ... function test(title, callback) { } ... ``` --- ##### Improve Assertion Library V1.3 ```javascript= //assertion-library.js ... function test(title, callback) { try { callback(); } catch (error) { console.error(error); } } ... ``` --- ##### Improve Assertion Library V1.4 ```javascript= //assertion-library.js ... function test(title, callback) { try { callback(); console.log(`✓ ${title}`); } catch (error) { console.error(`✕ ${title}`); console.error(error); } } ... ``` --- ##### Improve Assertion Library V1.5 ```javascript= //assertion-library.js ... // test sum test("sum adds numbers", () => { const result = sum(3, 7); const expected = 10; expect(result).toBe(expected); }); // test subtract test("subtract subtracts numbers", () => { result = subtract(7, 3); expected = 5; expect(result).toBe(expected); }); ... ``` --- ##### Output (shows all test result failed) ![](https://i.imgur.com/MEcYJbY.png) --- ##### Improve Assertion Library V1.6 ```javascript= //assertion-library.js ... // test sum test("sum adds numbers", () => { const result = sum(3, 7); const expected = 10; expect(result).toBe(expected); // this should fail }); // test subtract test("subtract subtracts numbers", () => { result = subtract(7, 3); expected = 4; expect(result).toBe(expected); // this should pass }); ... ``` --- ##### Output (shows all test results. 1 failed, 1 passed) ![](https://i.imgur.com/Lx2CEmR.png)
{"metaMigratedAt":"2023-06-16T13:37:54.900Z","metaMigratedFrom":"Content","title":"Untitled","breaks":true,"contributors":"[{\"id\":\"0bff8528-4948-4f28-beba-6673971ebc61\",\"add\":6882,\"del\":2610}]"}
    240 views