Настройка испытательного стенда для трубы

#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.

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