Дразнить нестандартный источник событий с шуткой - PullRequest
0 голосов
/ 29 января 2020

Я хочу заявить, что emit из класса EventEmitter был вызван с указанными c параметрами с помощью Jest. У меня есть отдельный файл, в котором я создаю экземпляр eventEmitter для использования, а в другом классе я импортирую его, и в какой-то момент событие генерируется.

// commonEmitter.ts
const events = require('events');
export const commonEmitter = new events.EventEmitter();

// class.ts
import { commonEmitter } from (..)

export class MyClass {
   (...)       

   method(){
     commonEmitter.emit('eventName', { data: true});
   }
}

// class.spec.ts

let commonEmitterMock: any

beforeEach(() => {
  commonEmitterMock = createMock('emit');
});


it('testMyClass', async () => {
   const method = new MyClass().method();
   expect(commonEmitterMock).toHaveBeenCalledWith('eventName', { data: true})
}

В этой реализации событие emit никогда не выполняется называется .. Не могу понять, почему, любая идея?

1 Ответ

0 голосов
/ 29 января 2020

Лучше внедрить зависимость, чтобы сделать ваш класс более тестируемым, чем импортировать его. Таким образом, ваш класс будет выглядеть как

export class MyClass {
   constructor(commonEmitter) {
     this.commonEmitter_ = commonEmitter;
   }
   method(){
     this.commonEmitter_.emit('eventName', { data: true});
   }
}

И тогда ваш тестовый файл может быть

let commonEmitterMock: any

beforeEach(() => {
  commonEmitterMock = createMock('emit');
});


it('testMyClass', async () => {
   const method = new MyClass(commonEmitterMock).method();
   expect(commonEmitterMock).toHaveBeenCalledWith('eventName', { data: true})
}
...