Как смоделировать вызов библиотечной функции в машинописи? - PullRequest
0 голосов
/ 24 октября 2019

Я не могу смоделировать вызов сторонней функции в машинописи. Сторонняя библиотека - moment-timezone, и я хочу смоделировать код, чтобы получить часовой пояс браузера для написания jest-теста.

Ниже приведен код, который мне нужно смоделировать и вернуть строку как «Австралия / Сидней»

moment.tz.guess()

Я пытаюсь использовать jest.mock () как: -

jest.mock('moment-timezone', () => () => ({ guess: () => 'Australia/Sydney' }));

1 Ответ

0 голосов
/ 25 октября 2019

Вот решение:

index.ts:

import moment from 'moment-timezone';

export function main() {
  return moment.tz.guess();
}

index.spec.ts:

import { main } from './';
import moment from 'moment-timezone';

jest.mock('moment-timezone', () => {
  const mTz = {
    guess: jest.fn()
  };
  return {
    tz: mTz
  };
});

describe('main', () => {
  test('should mock guess method', () => {
    (moment.tz.guess as jest.MockedFunction<typeof moment.tz.guess>).mockReturnValueOnce('Australia/Sydney');
    const actualValue = main();
    expect(jest.isMockFunction(moment.tz.guess)).toBeTruthy();
    expect(actualValue).toBe('Australia/Sydney');
    expect(moment.tz.guess).toBeCalled();
  });
});

Результат модульного теста со 100% покрытием:

 PASS  src/stackoverflow/58548563/index.spec.ts
  main
    ✓ should mock guess method (6ms)

----------|----------|----------|----------|----------|-------------------|
File      |  % Stmts | % Branch |  % Funcs |  % Lines | Uncovered Line #s |
----------|----------|----------|----------|----------|-------------------|
All files |      100 |      100 |      100 |      100 |                   |
 index.ts |      100 |      100 |      100 |      100 |                   |
----------|----------|----------|----------|----------|-------------------|
Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        5.828s, estimated 19s
...