Синтаксические проблемы
Если это только синтаксическая проблема, вы можете использовать mocha следующим образом:
describe('my test suite', () => {
it('should return valid data', async () => {
let service = new Service();
let res = await service.problemFunc({...});
expect(res).to.equal(...);
});
});
Если вы ожидаете, что ваш problemFunc
выдаст ошибку, вы должны использовать npmmodule chaiAsPromised
, потому что это асинхронная функция (возвращает обещание).
Спецификации внешних зависимостей
Здесь вы видите несколько внешних зависимостей с бизнес-логикой, смешанной вместе.Для проверки таких внешних зависимостей вы должны использовать внедрение зависимостей.
Вы передаете внешние зависимости через конструктор вашего класса Service.
constructor(private externalService1, private externalService2){
this.externalService1 = externalService1;
this.externalService2 = externalService2;
}
Тогда ваш метод должен выглядеть следующим образом:
async problemFunc() {
let data1 = await this.externalService1.getData();
let data2 = await this.externalService2.getData();
}
Поэтому вы можете смоделировать внешние зависимости в вашем наборе тестов:
describe('my test suite', () => {
it('should return valid data', async () => {
let fakeDb1 = {
getData: () => { return {}; }
}
let fakeDb2 = {
getData: () => { return {}; }
}
let service = new Service(fakeDb1, fakeDb2);
let res = await service.problemFunc({...});
expect(res).to.equal(...);
});
});
Этот список хорошо написанных статей может быть полезен: https://enterprisecraftsmanship.com/2015/06/29/test-induced-design-damage-or-why-tdd-is-so-painful/