【发布时间】:2020-09-19 17:44:20
【问题描述】:
我如何在 jasmin karma 上为以下代码编写测试用例。 我什至不明白从哪里开始写下面的测试用例emitEvent 任何人都可以帮助我,这样我就可以清楚地了解事情的进展情况..
import { Injectable } from '@angular/core';
@Injectable()
export class GaEventsService {
public emitEvent(
eventLabel: string = null,
eventCategory: string,
eventAction: string,
eventValue: number = null
) {
(window as any).ga('send', 'event', {
eventLabel,
eventCategory,
eventAction,
eventValue,
});
}
}
这是我的测试用例 spec.ts
import { TestBed } from '@angular/core/testing';
import { GaEventsService } from './ga-events.service';
fdescribe('DateFormatService', () => {
let service: GaEventsService;
beforeEach(() => {
TestBed.configureTestingModule({
providers: [
GaEventsService,
// { provide: GaEventsService, useClass: GaEventsServiceMock },
],
});
service = TestBed.inject(GaEventsService);
});
it('should be created', () => {
expect(service).toBeTruthy();
});
beforeAll(() => {
// (<any>window).gtag=function() {} // if using gtag
(window as any).ga = () => {};
});
it('should be created service', () => {
expect(GaEventsService).toBeDefined();
});
it('should do something...', () => {
const gaSpy = spyOn(service.emitEvent, 'ga');
expect(gaSpy).toHaveBeenCalledWith('send', 'event', {
eventLabel: 'eventLabel',
eventCategory: 'eventCategory',
eventAction: 'eventAction',
eventValue: 'eventValue',
});
});
});
我猜这是未覆盖的线 - code coverage image
【问题讨论】:
-
你不应该在你的代码中直接使用窗口对象。而是为它创建一个提供者并将其用作依赖项。这也可能使测试更容易编写。
标签: angular typescript unit-testing jasmine karma-jasmine