Модульный тест Typescript закрытых и защищенных методов - PullRequest
0 голосов
/ 23 февраля 2019

Я хочу иметь возможность тестировать частные Typescript методы.Пожалуйста, пропустите вашу лекцию why this is a bad idea.Я слышал это.

Вот демонстрационный код:

class MyClass {
    age: number

    private ageAsString(): string {
        return '15'
    }
}

Вот мои параметры в тестовом файле:

1 - запись //@ts-ignore, которая позволяет TS скомпилировать эту строку.Это очень неудобно, когда вы звоните 200 х expect() с.Но я не смог найти способ сделать этот блок на основе файлов.

it('Test ageAsString', () => {
    // @ts-ignore
    expect(new MyClass().ageAsString()).to.equal('15')
})

2 - Превращение объекта класса в any объект.Это отключает функции автозаполнения и рефакторинга, которые я получаю от TS и моей IDE.Сначала это кажется хорошей идеей, но через месяц она либо сломает 200 моих тестов, либо приведет к непредвиденным ошибкам.

it('Test ageAsString', () => {
    const anyClass: any = new MyClass
    expect(anyClass.ageAsString()).to.equal('15')
})

3 - Может использовать доступ к массиву, который работает, но создает те же проблемы, что и # 2.

it('Test ageAsString', () => {
    expect(new MyClass()['ageAsString']()).to.equal('15')
})

Я хочу как-то иметь возможность протестировать эти методы, не имея недостатков,Сейчас у меня есть 2 варианта, оба плохих.

  1. Пропустить написание конкретных подробных юнит-тестов
  2. Сделать метод общедоступным

Пожалуйста, дайте мне 3-й вариант

...