#angular #unit-testing #jasmine #pipe #karma-jasmine
Вопрос:
Коллеги, может ли кто-нибудь мне сказать, что я пытаюсь настроить тестовый стенд для трубы, и он работает только в том случае, если я сброшу саму трубу поставщикам, которые я буду тестировать. Я никак не могу обойти это, не могли бы вы сказать мне, в чем дело? Второй вопрос: в дополнение к методу преобразования у меня есть частный метод в трубе, как я могу его протестировать ??
Ответ №1:
Я бы попытался сделать это таким образом.
Но иметь его в качестве поставщика-это нормально, и вы хватаетесь за него.
Чтобы протестировать частный метод, вы можете настроить среду таким образом, чтобы она пересекала частный метод.
@Pipe({ name: 'xyz', pure: true })
export class SdDateFormatPipe implements PipeTransform {
value: number;
constructor(private datePipe: DatePipe, private configService: ConfigService) {}
transform(value: string): string {
if (value.includes('a')) {
this.setValue(1);
} else {
this.setValue(2);
}
}
private setValue(num: number) {
this.value = num;
}
}
it("should set value to 1 if the string has a", () => {
pipe.transform('abc');
expect(pipe.value).toBe(1);
});
it("should set value to 2 if the string does not have an a", () => {
pipe.transform('xyz');
expect(pipe.value).toBe(2);
});
Поэтому в конце дня посмотрите, что вы получаете от частного метода, и подтвердите, что он делает то, что должен был сделать.
Ответ №2:
Вы можете создать экземпляр с помощью let pipe = new SdDateFormatPipe (), если в нем нет инъекции depedencies.
Что касается частного метода, то он, вероятно, вызывается внутри общедоступного метода, поэтому, чтобы охватить его в ваших тестах, правильным и рекомендуемым способом сделать это было бы создание тестового случая, в котором он вызовет частный метод.