Как мне написать простой тест для проверки поведения MatDialog в Angular 2? - PullRequest
0 голосов
/ 11 января 2019

У меня есть следующий компонент:

@Component({
  selector: 'my-form',
  templateUrl: './my-form.component.html',
})
export class MyFormComponent implements OnInit {

  @Input('company') company: CompanyInfo;
  private config: ConfigInterface | null;

  constructor(private companyService: CompanyService, private something: Something, private dialog: MatDialog) {
  }
  ngOnInit() {
    ....
  }

  theMtehodWhichIWantToTest(company: string) {
    if (someTest.indexOf(domain)) {
      this.dialog.open(MyAllertComponent, {
        data: {
          title: 'blah',
        },
      });
    }
  }
}

Мой плохой и неудачный юнит-тест:

describe( 'MyFormComp', () => {
  it('should open MatDialog if email is from popular domain', () => {
    const dialog = {} as MatDialog;
    const comp = new MyComponent({} as CompanyService, {} as Something, dialog);
    comp.getCompanys(company);
    expect(dialog.open(AlertComponent));
  });
})

Сообщение об ошибке: TypeError: dialog.open is not a function

Да, я знаю, почему у меня появляется это сообщение об ошибке - я неправильно высмеиваю диалог, а функция open недоступна. Может кто-нибудь сказать мне, как сделать open доступным, используя жасмин (т.е. как правильно издеваться над MatDialog?)

Я совсем новичок в модульном тестировании js, поэтому просто сказать мне, что гуглить, не очень полезно для меня.

1 Ответ

0 голосов
/ 11 января 2019

Вы можете использовать метод beforeEach для создания шпионов для зависимостей вашего компонента:

emailServiceSpy = jasmine.createSpyObj('EmailService', {});
somethingSpy = jasmine.createSpyObj('Something', {});
dialogSpy = jasmine.createSpyObj('MatDialog', ['open']);

Затем предоставьте их для вашего Testmoudle:

TestBed.configureTestingModule({
  declarations: [YourComponent],
  providers: [
    { provide: EmailService, useValue: emailServiceSpy },
    { provide: Something, useValue: somethingSpy },
    { provide: MatDialog, useValue: dialogSpy },
  ],
  imports: [],
}).compileComponents();

И в своем тесте вы можете проверить, вызвана ли ваша шпионская функция:

expect(dialogSpy.open).toHaveBeenCalled();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...