Модульный тест с использованием Jasmine, возвращающий TypeError: не является функцией - PullRequest
0 голосов
/ 16 мая 2018

Я пытаюсь выполнить юнит-тест, используя Jasmine и вызывая мои сервисы Angular 5, но я получил следующую ошибку

TypeError: this.dailySalesService.resetValues is not a function

Это происходит при вызове метода changeDate в component.changeDate(new Date());. Внутри метода changeDate я правильно вызываю dailySalesService, так что я думаю, что это не ошибка в моем компоненте.

Мой юнит тест

import 'rxjs/add/observable/of';
import { Observable } from 'rxjs/Observable';
import { LayoutService } from './../../core/services/layout.service';
import { TestBed, ComponentFixture } from '@angular/core/testing';
import { HomeDailySalesComponent } from './home-daily-sales.component';
import { HomeDailySalesProgressComponent } from './home-daily-sales-progress.component';
import { DailySalesService } from '../shared/daily-sales.service';
import { TextMaskModule } from 'angular2-text-mask';
import { FormsModule } from '@angular/forms';

describe('Component: HomeDailySalesComponent', () => {
    let component: HomeDailySalesComponent;
    let fixture: ComponentFixture<HomeDailySalesComponent>;
    const dailySalesServiceMock = jasmine.createSpyObj('DailySalesService', ['getSummarySalesDay']);

    beforeEach(() => {
        TestBed.configureTestingModule({
            imports: [
                TextMaskModule,
                FormsModule
            ],
            providers: [
                { provide: DailySalesService, useValue: dailySalesServiceMock }
            ],
            declarations: [
                HomeDailySalesComponent,
                HomeDailySalesProgressComponent
            ]
        });

        fixture = TestBed.createComponent(HomeDailySalesComponent);
        component = fixture.componentInstance;
    });

    it('should return service success without content', () => {
        dailySalesServiceMock.getSummarySalesDay.and.callFake(function () {
            return Observable.of({});
        });

        // error here, when changeDate is called
        component.changeDate(new Date());
        expect(component.error).toBeTruthy();
        expect(dailySalesServiceMock.getSummarySalesDay).toHaveBeenCalledTimes(2);
    });
});

Ошибка журнала

at <Jasmine>
    at HomeDailySalesComponent.webpackJsonp../src/app/home/home-daily-sales/home-daily-sales.component.ts.HomeDailySalesComponent.changeDate (http://localhost:9876/_karma_webpack_/webpack:/src/app/home/home-daily-sales/home-daily-sales.component.ts:53:56)
    at UserContext.<anonymous> (http://localhost:9876/_karma_webpack_/webpack:/src/app/home/home-daily-sales/home-daily-sales.component.spec.ts:105:19)
    at ZoneDelegate.webpackJsonp../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke (http://localhost:9876/_karma_webpack_/webpack:/node_modules/zone.js/dist/zone.js:388:1)
    at ProxyZoneSpec.webpackJsonp../node_modules/zone.js/dist/proxy.js.ProxyZoneSpec.onInvoke (http://localhost:9876/_karma_webpack_/webpack:/node_modules/zone.js/dist/proxy.js:128:1)
    at ZoneDelegate.webpackJsonp../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke (http://localhost:9876/_karma_webpack_/webpack:/node_modules/zone.js/dist/zone.js:387:1)
    at Zone.webpackJsonp../node_modules/zone.js/dist/zone.js.Zone.run (http://localhost:9876/_karma_webpack_/webpack:/node_modules/zone.js/dist/zone.js:138:1)
    at runInTestZone (http://localhost:9876/_karma_webpack_/webpack:/node_modules/zone.js/dist/jasmine-patch.js:145:1)
    at UserContext.<anonymous> (http://localhost:9876/_karma_webpack_/webpack:/node_modules/zone.js/dist/jasmine-patch.js:160:1)
    at <Jasmine>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...