Выпуск
Создание нового экземпляра класса в модульном тесте не вызывает конструктор.
Подробности
Я пытаюсь проверить, возникла ли ошибка приуказан неверный IP-адрес сервера, однако, когда я пытаюсь создать новый экземпляр класса, который должен выдать ошибку, он не работает.
Класс, который я пытаюсь проверить:
export class ClassA {
private readonly _redisServerIP = config.redisServerIP;
private readonly _redisServerPort = config.redisServerPort;
constructor() {
console.log(this._redisServerIP);
this.configure();
}
private configure(): void {
this._redisSub = redis.createClient({host: this._redisServerIP, port: this._redisServerPort});
this._redisSub.on('error', (error) => {
if (error.code === "ECONNREFUSED") {
this._logger.error('Could not create a redisSub, is the redis server running?');
}
throw new Error('Something bad happened');
});
}
}
Это мой тестовый код:
import * as constants from '../src/config/config';
let socket;
let classA;
let httpServerAddr;
beforeAll((done) => {
classA = new ClassA();
httpServerAddr = classA.getServerIp();
done();
});
afterAll((done) => {
done();
});
beforeEach((done) => {
});
afterEach((done) => {
done();
});
describe('Socket.io redis testing', () => {
test('should fail due to invalid serverIP', () => {
constants.config.redisServerIP = "0.0.0.0";
classA = null;
expect(() => {
classA = new ClassA();
}).toThrow();
});
});
Я вижу ip сервера только один раз в консоли моего узла, и тест не пройден из-за следующей ошибки:
expect(function).toThrow(undefined)
Expected the function to throw an error.
But it didn't throw anything.
Этопотому что каждый тест выполняется по-своему?И когда он работает в том, что сказал обещание не может войти в консоль?Или это из-за того, что я не очистил существующий экземпляр ClassA перед вызовом нового ClassA ()?
====== EDIT ======
После использования точек останова я понял, что конструктор вызывается, однако он не записывает данные в консоль.Но бросок никогда не происходит, как работает redis;если возникает ошибка, на сервер Redis отправляется событие с именем «error», оно не запускается при выполнении теста, как можно ждать, пока оно сработает?