#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, вам следует имитировать не саму службу, а ее зависимости.