Как проверить использование декоратора в машинописи? - PullRequest
0 голосов
/ 11 октября 2018

Предположим, что существует декоратор свойств, и класс использует этот декоратор для своих определенных свойств.

function foo(options?: any) {
    return function (target: any, prop: string) {
        // some magic
    }
}

class Bar {
    @foo({ opt1: true }) zoo = 123
}

Предположим, что я рассмотрел логику foo в своих модульных тестах и ​​теперь готов написатьтест гарантирует, что класс

Bar использовал декоратор foo в своем свойстве zoo с опцией { opt1: true }

Как этот тест должен быть написан?

PS Я использую jest вместе с ts-jest и открываю для любых других тестовых сред при необходимости.

1 Ответ

0 голосов
/ 11 октября 2018

Это интересный вопрос.

Декораторы предназначены для непосредственного использования, поэтому не могут быть осмеяны обычными средствами.Это может быть законным случаем использования jest обходного макета.

Однако, IMO, цель вашего теста неуместна.Вы не должны проверять тот факт, что он был вызван с помощью { opt1: true }, вы должны проверить поведение использования такого декоратора, если это возможно.

Проверка того, что он был вызван с помощью { opt1: true }то же самое, что вы хотите проверить findLCD(a: number, b: number), чтобы убедиться, что он вызвал Math.abs(a).

. Вы должны сосредоточиться на поведении (которое findLCD(a, b) даст вам правильный результат), а не на том, каккод делает это.

Средство, если ваш декоратор @foo делает что-то измеримое, вместо этого проверьте.

Например, если @foo напишите какую-нибудь запись в журнале, найдитеспособ проверки записи журнала написан, вместо @foo был вызван определенным образом.

...