Test of async method in Jest

An example of code:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
module.exports = {
  checkUser: (user, cb) => {
    if (user.age < 18) {
      setTimeout(() => {
        // do smth
        cb(user.age);
      }, 500);
    }
  },
};

If you write test like this:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
describe("example", () => {
  it("First test", () => {
    expect.hasAssertions(); // it checks that at least one "expect" was called

    const user = {
      age: 10,
    };

    checkUser(user, (age) => {
      expect(age).toBe(user.age);
    });
  });
});

This test will fail

To make this test passed you should use callback function in method it or use Promise

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
describe("example", () => {
  it("First test", (done) => {
    expect.hasAssertions();

    const user = {
      age: 10,
    };

    checkUser(user, (age) => {
      expect(age).toBe(user.age);
      done();
    });
  });
});