Не удается прочитать свойство returnValue из неопределенного - PullRequest
0 голосов
/ 17 мая 2019

Я пишу свой самый первый модульный тест, основанный на официальных Angular документах

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

Моя попытка:

import { TestBed } from '@angular/core/testing';
import { HttpClient } from '@angular/common/http';

import { VService } from './vservice';

fdescribe('VService', () => {
 let VServiceSpy: jasmine.SpyObj<VService>;

 beforeEach(() => {
   const spy = jasmine.createSpyObj('VService', ['getAll']);

   TestBed.configureTestingModule({
     // this fixed an issue which is why i added it
     providers: [{ provide: HttpClient, useValue: spy }]
   });

   VServiceSpy = TestBed.get(VService);
 });

 it('should be created', () => {
   expect(VServiceSpy).toBeTruthy();
 });

 it('#getAll should return stubbed value from a spy', () => {
   const stubValue = [
     {
       id: '1',
       name: 'Repairs',
       number: '000000001',
       address: '1 Test Rd. Tampa, OH 44442',
       phoneNumber: '111-111-1111',
       emailAddress: 'test@email.com'
     }
   ];
   // here is the issue
   VServiceSpy.getAll.and.returnValue(stubValue);

   expect(VServiceSpy.getAll()).toBe(stubValue, 'service returned stub value');
   expect(VServiceSpy.getAll.calls.count())
     .toBe(1, 'spy method was called once');
   expect(VServiceSpy.getAll.calls.mostRecent().returnValue)
     .toBe(stubValue);
 });
});

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

1 Ответ

0 голосов
/ 19 мая 2019

Вы очень близки. Чтобы протестировать сервис, вам нужно добавить этот сервис в массив провайдеров. Так что измени это:

TestBed.configureTestingModule({
  // this fixed an issue which is why i added it
  providers: [{ provide: HttpClient, useValue: spy }]
});

примерно так:

TestBed.configureTestingModule({
  providers: [
    VService,
    { provide: HttpClient, useValue: spy }
  ]
});

Примечание: вы можете сделать шпиона для HttpClient, как вы его настроили, но также посмотрите на HttpClientTestingModule, что хорошо задокументировано здесь .

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