Как проверить эту конкретную c ситуацию в Jest - PullRequest
1 голос
/ 11 апреля 2020

Я знаю, что название действительно плохое, но я сейчас точно знаю, как объяснить ситуацию. Не стесняйтесь предложить лучший заголовок, и я его поменяю.

Так что я только начинаю тестировать в первый раз, и я использую Jest. все было в порядке, пока я не наткнулся на такую ​​конструкцию

function f(n) {
    let g;
    if (n === 1) {
        g = () => console.log(`ok`);
    } else {
        g = () => {throw `not okay`;};
    }

    someEvent.listen(async () => {
        g();
    });
}

Я застрял на том, как проверить это, когда я вставляю что-то отличное от 1 до f, оно выдаст not okay. Из того, что я понял, простейший expect(...).toBe(...) будет работать, если обратный вызов события не асин c, но я не смог понять, как это сделать, если он асин c.

1 Ответ

1 голос
/ 11 апреля 2020

Предполагая, что someEvent определяется как глобальная функция

global.someEvent = {
  listen: jest.fn(),
};

, вы можете проверить это следующим образом:

  1. вызовите функцию f с чем-то отличным от 1
  2. может утверждать, что метод .listen был вызван с функцией получения * должен вернуть отклоненное обещание с «не в порядке»
describe("the f function", () => {
  describe("called with something else", () => {
    beforeAll(() => {
      global.someEvent.listen.mockClear();
      f("x");
    });

    it("set the someEvent handler", () => {
      expect(global.someEvent.listen).toHaveBeenCalledWith(
        expect.any(Function)
      );
    });

    describe("when the someEvent triggers the handler", () => {
      let handler;
      beforeAll(() => {
        [[handler]] = global.someEvent.listen.mock.calls;
      });

      it("should return rejected promise with `not okay`", async () => {
        await expect(handler()).rejects.toEqual("not okay");
      });
    });
  });
});

рабочий пример

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...