繁体   English   中英

我测试的文件中的 mocha 访问变量

[英]mocha access variable in file which function i test

好的,我会试着解释这个简单的。 所以我有这个包含这个变量的文件,然后是我正在测试的函数

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;
  }
}

然后我尝试测试这两个否定如果这样

describe('OnConfigEvent', () => {

  it('should log missing second thing', () => {

    let event: ConfigEvent = {
      type: events.Config,
      config: { ["firstThing"]: false }
    }

    let spy = sinon.spy(console, 'log');

    onConfigEvent(event)

    assert(spy.calledWith('Missing 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();
  });
});

这里的问题是,在第一个测试运行后,第二个测试将返回第一个 if 语句"Ignoring config event because we already have the config." 因为在第一次测试期间设置了配置。 我如何从我正在测试函数的文件中访问let gameConfig以便我可以在每次测试之前将其设置为 undefined

您可以使用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             
----------|---------|----------|---------|---------|-------------------

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM