Измените значение глобальной переменной, используемой в тестируемой функции - PullRequest
0 голосов
/ 18 октября 2019

Можно ли изменить значение глобальной переменной при тестировании функции, которая ее использует?

Мой код:

let check = false;

function myFunction () {
  if (check) {
   doStuff();
  } else {
    doOtherStuff();
  }
}

Мой тест:

describe("test myFunction", () => {
  it("should call doStuff", () => {
    doStuff = jest.fn();

    myFunction();

    expect(doStuff).toBeCalled();
  });
});

Я хочу, чтобы мой тест выполнялся doStuff вместо doOtherStuff, есть способвысмеивать функцию, которая позволяет мне это делать?

1 Ответ

1 голос
/ 21 октября 2019

Как сказал @ jfriend00,

переменная check не является глобальной переменной в node.js. Эта переменная имеет область видимости модуля, а не глобальную область видимости.

Если вы хотите сделать check глобальной переменной, вам нужно использовать global объект пространства имен.

Вот одно решение для вашего примера:

index.ts:

(global as any).check = false;

export const doStuff = () => 'doStuff';
export const doOtherStuff = () => 'doOtherStuff';

export function myFunction() {
  if ((global as any).check) {
    doStuff();
  } else {
    doOtherStuff();
  }
}

index.spec.ts:

import * as funcs from './';

describe('myFunction', () => {
  afterEach(() => {
    // restore to original value if needed
    (global as any).check = false;
  });
  it('should call doOtherStuff', () => {
    const doOtherStuffSpy = jest.spyOn(funcs, 'doOtherStuff');
    funcs.myFunction();
    expect(doOtherStuffSpy).toBeCalled();
  });

  it('should call doStuff', () => {
    (global as any).check = true;
    const doStuffSpy = jest.spyOn(funcs, 'doStuff');
    funcs.myFunction();
    expect(doStuffSpy).toBeCalled();
  });
});

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

 PASS  src/stackoverflow/58454044/index.spec.ts (8.829s)
  myFunction
    ✓ should call doOtherStuff (5ms)
    ✓ should call doStuff (1ms)

----------|----------|----------|----------|----------|-------------------|
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:       2 passed, 2 total
Snapshots:   0 total
Time:        10.433s

Исходный код: https://github.com/mrdulin/jest-codelab/tree/master/src/stackoverflow/58454044

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