Имитировать или переопределять импорт модуля в модульном тестировании angular-cli

#angular #karma-runner #karma-jasmine #angular-cli

#angular #karma-runner #karma-jasmine #angular-cli

Вопрос:

Привет, я использую Angular 2, разработанный с angular-cli.

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

Мой класс обслуживания выглядит так

 import { streaming } from './streaming'

@Injectable()
export class StreamingService {


  constructor() {}

  streaming = streaming;
}
 

И мой тест — это стандартный сгенерированный файл спецификации теста

 import { streaming } from './streaming'
import { mockStreaming } from './mock-streaming'

    describe('Service: Streaming', () => {
      beforeEach(() => {


        spyOn(streaming);
        TestBed.configureTestingModule({
          providers: [StreamingService],
          imports: mockStreaming
        })

     });
 

Мне интересно, должен ли я включать свойство streaming в качестве параметра в функции конструктора, но я не хочу делать это таким образом.

Есть ли что-то, что я могу сделать в файле karma.conf или test.ts?

Ответ №1:

Вы можете создать MockStreamingService , который расширяет StreamingService :

 @Injectable()
export class MockStreamingService {


  constructor() {}
  //And then mock methods, properties etc...
}
 

А затем в вашем тесте:

 describe('Service: Streaming', () => {
  beforeEach(() => {


    spyOn(streaming);
    TestBed.configureTestingModule({
      providers: [{provide:StreamingService, useClass:MockStreamingService}]
    })

 });
 

Комментарии:

1. Я не думаю, что это сработает для меня, класс streaming, который я определил, представляет собой простой модуль es6, т. Е. let connect = () => {//connect code} let streaming = { connect: connect} export streaming Поэтому я хочу отключить общедоступные методы с помощью шпионов или заглушек

2. вы можете использовать spyOn в jasmine для добавления шпиона в метод. Если вы хотите протестировать StreamingService, вам следует имитировать не саму службу, а ее зависимости.