Angular-Testing:Angular5 spyOn在子组件中不起作用

时间:2018-10-25 07:36:52

标签: angular angular5 karma-jasmine angular-routing angular-test

我有一个angular应用,它的一个子模块正在通过延迟加载进行加载。我正在app.routing.ts中使用此代码来加载该模块。

{
    path: '',
    component: FullLayoutComponent,
    data: {
        title: 'Home'
    },
    children: [
        {
            path: 'dashboard',
            loadChildren: './views/dashboard/dashboard.module#DashboardModule'
        }
    ],
    canActivate: [LoggedInGuard]
},

现在在仪表板模块中的所有组件中,我的单元测试都无法正常工作。即因为spyOn无法正常工作。让我展示一下规范文件的代码和实际功能

it('be able to call getDemographicsData function from ngOnInit', () => {
        spy = spyOn(programDemographicsComponent, 'getDemographicsData').and.callThrough();
        spyOn(programDemographicsComponent, 'dateRangeHandler');
        programDemographicsComponent.ngOnInit();
        expect(programDemographicsComponent.getDemographicsData).toHaveBeenCalled();
    });

我正在进行单元测试的功能是:

ngOnInit() {
        this.qualifyingProductsTableCurrentPage = 0;
        this.qualifyingProductsTableValuesPerPage = 5;
        const startDateMillis = moment().subtract(90, 'days').valueOf();
        const endDateMillis = moment().valueOf();
        this.getDemographicsData(startDateMillis, endDateMillis)
    }

    getDemographicsData(startDateMillis, endDateMillis) {
        console.log('spy is not working')
        const metricsRequestData = new MetricsRequest();
        metricsRequestData.startDateMillis = startDateMillis;
        metricsRequestData.endDateMillis = endDateMillis;
        this.getGenderData(metricsRequestData);
        this.getAgeData(metricsRequestData);
    }

由于我在测试用例中监视了getDemographicsData(startDateMillis, endDateMillis)方法,但是我的console.log('spy is not working')仍在工作。 请让我知道是否需要更多详细信息。

PS。我已经检查了父组件中的相同问题,而我的spyOn在其中正常工作。我只在延迟加载的组件中遇到问题

1 个答案:

答案 0 :(得分:0)

由于延迟加载是异步操作,因此测试也应该是异步的。您可以在this SO question中看到如何使其异步。