Угловая 6 труба не поддерживает конструктор - PullRequest
0 голосов
/ 09 июня 2018

Это мой date-formatter-by-timezone.pipe.ts pipe

import { Pipe, PipeTransform } from '@angular/core';
import { CookieService } from 'ngx-cookie-service';

@Pipe({
  name: 'dateFormatterSecByTimezone'
})
export class DateFormatterSecByTimezonePipe implements PipeTransform {

  constructor(private cookieService: CookieService) {}

  timezone:any = parseInt(this.cookieService.get('TM_Z')) * 1000;

  caculateTime(date , timezone){
    //some code here ...
  }

  transform(date: any){
     return this.caculateTime(date , this.timezone)
  }
}

И это spec-файл date-formatter-sec.pipe.spec.ts:

import { DateFormatterSecByTimezonePipe } from './date-formatter-sec-by- 
timezone.pipe';

describe('DateFormatterSecByTimezonePipe', () => {
  it('create an instance', () => {
    const pipe = new DateFormatterSecByTimezonePipe();
    expect(pipe).toBeTruthy();
  });
});

В spec-файле я получил эту ошибку:

Expected 1 argument, but got 0.
(alias) new DateFormatterSecByTimezonePipe(cookieService: CookieService): 
DateFormatterSecByTimezonePipe
import DateFormatterSecByTimezonePipe

но когда я использую код выше, предложенный редактором, он все равно не работает!Я импортировал конструктор в свой канал, потому что мне нужно было использовать данные cookie в этом канале.Как я могу исправить эту ошибку?

Ответы [ 2 ]

0 голосов
/ 26 августа 2018

Возможно, вы захотите увидеть этот похожий вопрос по SO :

Суть в том, что вы должны сделать что-то вроде этого:

import {SafeHtmlPipe} from './safe-html.pipe';
import {inject} from '@angular/core/testing';
import {DomSanitizer} from '@angular/platform-browser';


describe('SafeHtmlPipe', () => {
  it('create an instance', inject([DomSanitizer], (sanitize: DomSanitizer) => {

    const pipe = new SafeHtmlPipe(sanitize);
    expect(pipe).toBeTruthy();
  }));
});
0 голосов
/ 09 июня 2018

Ошибка не от Angular, это простая проблема Typescript: у вас есть конструктор с аргументом, но в тесте вы не передаете аргумент.Этот аргумент обычно подается DI в Angular.Из документации по тестированию (см. Ссылку ниже):

Как потребитель сервиса, вам не нужно беспокоиться об этом.Вы не беспокоитесь о порядке аргументов конструктора или о том, как они создаются.В качестве тестера сервисов вы должны хотя бы подумать о первом уровне зависимостей сервисов, но вы можете позволить Angular DI создавать сервисы и работать с порядком аргументов конструктора, когда вы используете утилиту тестирования TestBed для предоставления и создания сервисов.

Таким образом, вы можете исправить этот конкретный тест, используя

const pipe = new DateFormatterSecByTimezonePipe(null);

Но это не будет очень полезно, если вы захотите написать тесты, которые фактически утверждают поведение канала.Труба по сути как услуга здесь.Вы можете сами создавать экземпляры служб в тестах, если они не требуют зависимостей или вы также можете создавать зависимости в тесте.Если вы хотите, чтобы Angular использовал DI для создания экземпляров сервисов, вам нужно использовать его инструменты:

https://angular.io/guide/testing

В этой статье также объясняются такие подходы, как использование шпионов.

...