如何使用玩笑来测试void函数

时间:2020-03-10 12:24:03

标签: javascript typescript react-native unit-testing jestjs

我有一个什么都不返回的函数。我们如何编写开玩笑的测试用例来验证此功能?

onSilentTrackReadyToPlay(callback: (trackState: string) => void): void {
    this.trackReadySubscription = this.MediaPlayerEventEmitter.addListener(
      'silentTrackReadyToPlay',
      (trackState) => {
        if (callback) {
          callback(trackState)
        }
      },
    )
  }

1 个答案:

答案 0 :(得分:2)

这是单元测试解决方案:

index.ts

export class SomeClass {
  private MediaPlayerEventEmitter;
  private trackReadySubscription;
  constructor(MediaPlayerEventEmitter) {
    this.MediaPlayerEventEmitter = MediaPlayerEventEmitter;
  }
  onSilentTrackReadyToPlay(callback?: (trackState: string) => void): void {
    this.trackReadySubscription = this.MediaPlayerEventEmitter.addListener('silentTrackReadyToPlay', (trackState) => {
      if (callback) {
        callback(trackState);
      }
    });
  }
}

index.test.ts

import { SomeClass } from './';

describe('60617618', () => {
  it('should call callback if exists', () => {
    const mMediaPlayerEventEmitter = {
      addListener: jest.fn().mockImplementationOnce((event, handler) => {
        handler();
      }),
    };
    const ins = new SomeClass(mMediaPlayerEventEmitter);
    const callback = jest.fn();
    ins.onSilentTrackReadyToPlay(callback);
    expect(mMediaPlayerEventEmitter.addListener).toBeCalledWith('silentTrackReadyToPlay', expect.any(Function));
    expect(callback).toBeCalledWith(undefined);
  });

  it('should do nothing if callback does not exist', () => {
    const mMediaPlayerEventEmitter = {
      addListener: jest.fn().mockImplementationOnce((event, handler) => {
        handler();
      }),
    };
    const ins = new SomeClass(mMediaPlayerEventEmitter);
    ins.onSilentTrackReadyToPlay();
    expect(mMediaPlayerEventEmitter.addListener).toBeCalledWith('silentTrackReadyToPlay', expect.any(Function));
  });
});

具有100%覆盖率的单元测试结果:

 PASS  stackoverflow/60617618/index.test.ts (8.883s)
  60617618
    ✓ should call callback if exists (4ms)
    ✓ should do nothing if callback does not exist

----------|---------|----------|---------|---------|-------------------
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.307s