переменная доступа мокко в файле, функцию которого я тестирую - PullRequest
0 голосов
/ 23 марта 2020

Хорошо, я попытаюсь объяснить это просто. Итак, у меня есть этот файл с этой переменной, а затем функция, которую я тестирую

let config: Config|undefined;

export default async function onConfigEvent(event: myEvent) {

  if (isDefined(config)) {
    console.log('Ignoring config event because we already have the config.');
    return;
  }

  config = event.config as Config;

  if (!config.firstThing) {
    console.log('config miss first thing.')
    return;
  }

  if (!config.otherthing) {
    console.log('config missing second thing.');
    return;
  }
}

Затем я пытаюсь проверить эти два отрицательных значения, если это так первый тест был выполнен, второй вернет первый оператор if "Ignoring config event because we already have the config.", так как конфигурация будет установлена ​​во время первого теста. Как получить доступ к let gameConfig из файла, в котором я тестирую функцию?

1 Ответ

0 голосов
/ 25 марта 2020

Вы можете использовать rewire для сброса значения переменной config.

index.ts:

type Config = any;
type myEvent = any;
let config: Config | undefined;

function isDefined(obj) {
  return obj !== undefined;
}

export default function onConfigEvent(event: myEvent) {
  if (isDefined(config)) {
    console.log('Ignoring config event because we already have the config.');
    return;
  }

  config = event.config as Config;

  if (!config.firstThing) {
    console.log('config miss first thing.');
    return;
  }

  if (!config.otherthing) {
    console.log('config missing second thing.');
    return;
  }
}

index.test.ts:

import sinon from 'sinon';
import { assert } from 'chai';
import rewire from 'rewire';
type ConfigEvent = any;
const events = { Config: 'Config' };

describe('OnConfigEvent', () => {
  let onConfigEvent;
  let mod;
  beforeEach(() => {
    mod = rewire('./');
    onConfigEvent = mod.default;
  });
  afterEach(() => {
    mod.__set__({ config: undefined });
  });
  it('should log missing first thing', () => {
    let event: ConfigEvent = {
      type: events.Config,
      config: { ['firstThing']: false },
    };
    let spy = sinon.spy(console, 'log');
    onConfigEvent(event);
    assert(spy.calledWith('config miss first thing.'));
    spy.restore();
  });

  it('should log missing second thing', () => {
    let event: ConfigEvent = {
      type: events.Config,
      config: { ['firstThing']: true },
    };
    let spy = sinon.spy(console, 'log');
    onConfigEvent(event);
    assert(spy.calledWith('config missing second thing.'));
    spy.restore();
  });
});

Результаты модульных испытаний с отчетом о покрытии:

  OnConfigEvent
config miss first thing.
    ✓ should log missing first thing
config missing second thing.
    ✓ should log missing second thing


  2 passing (1s)

----------|---------|----------|---------|---------|-------------------
File      | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
----------|---------|----------|---------|---------|-------------------
All files |   83.33 |    66.67 |     100 |   83.33 |                   
 index.ts |   83.33 |    66.67 |     100 |   83.33 | 11,12             
----------|---------|----------|---------|---------|-------------------
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...