Проверка сервисного вызова из моего модульного теста - PullRequest
0 голосов
/ 18 декабря 2018

Как мне просто проверить, что мой сервис называется?

myComp.ts

constructor(private myService: MyService) {}

myFunction() {
   this.myService.someFunction();
}

myTest.ts

beforeEach(async(() => {
    TestBed.configureTestingModule({
      imports: [ReactiveFormsModule, FormsModule, HttpClientModule],
      declarations: [MyComponent]
    })
    .compileComponents();
  }));

  beforeEach(() => {
    fixture = TestBed.createComponent(MyComponent);
    component = fixture.componentInstance;
    fixture.detectChanges();
  });

  it('should delete customer feed', () => {
    const mySpy = spyOn(MyService, 'someFunction');

    component.myFunction();

    expect(mySpy).toHaveBeenCalledTimes(1);
  });

В настоящее время строка const mySpy = spyOn(MyService, 'someFunction');отображает красные кривые при 'someFunction', заявляя:

Аргумент типа 'someFunction' не может быть назначен параметру типа prototype |сервис |url

Обновление Как мои настройки теперь в соответствии с комментариями:

let myService: MyService;

beforeEach(() => {
  ...
  providers: [MyService],
  ...
  .compileComponents()
});

beforeEach(() => {
  fixture = TesBed.createComponent(MyComponent);
  component = fixture.componentInstance;
  fixture.detectChanges();

  myService = TestBed.get(MyService);
});

Обновление (решение) Я все еще использовалверхний регистр MyService, а не строчный myService в моем определении шпиона!

1 Ответ

0 голосов
/ 18 декабря 2018

Вы можете просто пойти дальше и spyOn свой сервисный метод, чтобы увидеть, был ли он вызван.Вы должны смоделировать службу и предоставить ее своему компоненту в TestBedConfiguration.

Вы можете смоделировать все методы службы и при необходимости вернуть любое значение, чтобы проверить, был ли вызван метод службы.

 class MyServiceStub {
     constructor(){}

     myFunction() { returns Observable.of({});}

    }
 let myService;
    beforeEach(async(() => {
    TestBed.configureTestingModule({
      imports: [ReactiveFormsModule, FormsModule, HttpClientModule],
       providers: [
                { provide: MyService, useValue: new MyServiceStub() }
            ],
            schemas: [NO_ERRORS_SCHEMA]
      declarations: [MyComponent]
    })
    .compileComponents();
  }));

   beforeEach(() => {
     fixture = TestBed.createComponent(MyComponent);
     component = fixture.componentInstance;
       fixture.detectChanges();
    myService = TestBed.get(MyService);
    });

  it('should delete customer feed', () => {
    const mySpy = spyOn(myService , 'someFunction');

    component.myFunction();

    expect(mySpy).toHaveBeenCalledTimes(1);
   });

, если вы не хотите издеваться над своим сервисом с помощью заглушки, просто используйте TestBed.get(MyService), чтобы получить экземпляр сервиса после предоставления сервиса вашему компоненту в TestBed.configureTestingModule

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