TypeScript: Jest a testování asynchronních funkcí

V tomto případě asynchronních funkcí implmementujících svůj návrat skrze callback funkci.

Tohle by mohla být nějaká asynchronní funkce pro výpočet součtu:

// ./src/index.ts
export default function callbackSumFunction(a: number, b: number, cb: (res: number) => void) {
    cb(a + b);
}

V kódu nic nehledejte. Je to opravdu jen princip: funkce s několika parametry, kde posledním je callback funkce, která se provede po získání výsledku. V mém případě ihned, nicméně princip je jasný…

Jest test

// ./__tests_/index.ts
import callbackSumFunction from '../src/index';

describe('sum function', () => {
    it('10 + 10 = 20', done => {

        // vytvorim si vlastni callback funkci, ve ktere testuji klasicky navratovou hodnotu
        function callback(data) {
            expect(data).toBe(20);
            done(); // dulezite! timhle ukoncim test
        }

        // volam testovanou funkci, ktere predavam ocekavane parametry a jako posledni callback funkci, kde mam vyhodnoceni testu
        callbackSumFunction(10, 10, callback);
    });
});

A tohle je na Jestu pěkné. Chová se přesně tak, jak byste čekali. Prostě zavoláte svou asynchronní funkci a v jejím callbacku provedete patřičný test. Hotovo.

Připojím snad jen kompaktnější zápis testovací funkce využívající arrow function.

// ./__tests_/index.ts
import callbackSumFunction from '../src/index';

describe('sum function', () => {
    it('10 + 10 = 20', done => {
        callbackSumFunction(10, 10, res => {
            expect(res).toBe(20);
            done();
        });
    });
});