Angular тестирование, издевательский сервис, который просто строит другие сервисы - PullRequest
0 голосов
/ 18 апреля 2020

Я понимаю, как я бы посмеялся над вызовом функции службы.

Хотя у меня есть случай, когда мой MainService является просто оболочкой для нескольких других служб.

 export class MainService {
  constructor(
    public service1: Service1,
    public service2: Service2,
    public service3: Service3
){}

Мой компонент внедряет MainService и вызывает this.mainService.service2.getUsers () для пример.

beforeEach(() => {
    TestBed.configureTestingModule({
      declarations: [MyComponent],
      providers: [
        FormBuilder,
        {
          provide: MainService,
          useValue: jasmine.createSpyObj('MainService', [
            'getUsers'
          ])
        }
      ],
      schemas: [NO_ERRORS_SCHEMA]
    })
    fixture = TestBed.createComponent(MyComponent)
  })

Я создал spyObject, который издевается над MainService и добавил функцию getUsers, я не думаю, что это работает, потому что функция getUsers не работает непосредственно с MainService. Как мне это сделать.

1 Ответ

0 голосов
/ 19 апреля 2020

Попробуйте:

const mockMainService = {
  service1: {
    // mock service 1 public methods and properties here,
  },
  service2: {
    getUsers: () => {....},
    // mock service 2 public methods and properties here,
  },
  service3: {
    // mock service 3 public methods and properties here.
  }
};
beforeEach(() => {
    TestBed.configureTestingModule({
      declarations: [MyComponent],
      providers: [
        FormBuilder,
        {
          provide: MainService,
          useValue: mockMainService,
        }
      ],
      schemas: [NO_ERRORS_SCHEMA]
    })
    fixture = TestBed.createComponent(MyComponent)
  })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...