Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
单元测试AngularJS服务方法thet使用$q.all解决多个承诺_Angularjs_Unit Testing_Jasmine_Karma Runner_Karma Jasmine - Fatal编程技术网

单元测试AngularJS服务方法thet使用$q.all解决多个承诺

单元测试AngularJS服务方法thet使用$q.all解决多个承诺,angularjs,unit-testing,jasmine,karma-runner,karma-jasmine,Angularjs,Unit Testing,Jasmine,Karma Runner,Karma Jasmine,我正在尝试测试以下服务方法,该方法调用另一个方法以使用不同参数多次检索数据 我一次只测试过解决一个承诺,因此我不确定如何将此方法作为karma/jasmine单元测试: getMappings(dealerId){ let dfd = this.$q.defer(); let promises = []; promises.push(this.DataService.getTranslationMappings(this.TRANSLATIONS.DEALER, de

我正在尝试测试以下服务方法,该方法调用另一个方法以使用不同参数多次检索数据

我一次只测试过解决一个承诺,因此我不确定如何将此方法作为karma/jasmine单元测试:

getMappings(dealerId){

    let dfd = this.$q.defer();
    let promises = [];

    promises.push(this.DataService.getTranslationMappings(this.TRANSLATIONS.DEALER, dealerId));
    promises.push(this.DataService.getTranslationMappings(this.TRANSLATIONS.DAYCOUNT, dealerId));
    promises.push(this.DataService.getTranslationMappings(this.TRANSLATIONS.FREQUENCY, dealerId));
    promises.push(this.DataService.getTranslationMappings(this.TRANSLATIONS.RATE_STATIC, dealerId));
    promises.push(this.DataService.getTranslationMappings(this.TRANSLATIONS.SETTLEMENT_TYPE, dealerId));

    this.$q.all(promises)
    .then((resp) => {
        dfd.resolve({
            dealers: resp[0].data,
            daycounts: resp[1].data,
            frequencies: resp[2].data,
            rateStatics: resp[3].data,
            settlementTypes: resp[4].data
        });
    }, (resp) => {
        dfd.reject(resp);
    });

    return dfd.promise;
}
任何帮助都将不胜感激。谢谢:)

已解决!:)

it('should get the mappings for listing', () => {

    let dealerId = 1;
    let resp;
    let count = 0;
    let dealers = [
        {
            "id": 1,
            "dealerId": 1,
            "translation": {
                "id": 2,
                "description": "Wayne Enterprise"
            },
            "synonym": "CTRPTYCODE 1"
        }
    ];
    let daycount = [
        {
            "id": 1,
            "dealerId": 1,
            "translation": {
                "id": 1,
                "description": "DAYCT 1"
            },
            "synonym": "DAYCTCODE 1"
        }
    ];
    let frequency = [
        {
            "id": 1,
            "dealerId": 1,
            "translation": {
                "id": 1,
                "description": "FREQ A"
            },
            "synonym": "FREQCODE 1"
        }
    ];
    let ratestat = [
        {
            "id": 1,
            "dealerId": 1,
            "translation": {
                "id": 1,
                "description": "RATESTAT 1"
            },
            "synonym": "RATESTATCODE 1"
        }
    ];
    let settlement = [
        {
            "id": 1,
            "dealerId": 1,
            "translation": {
                "id": 1,
                "description": "SETTYPE A"
            },
            "synonym": "SETTYPECODE 1",
            "$$hashKey": "object:221"
        }
    ];

    spyOn(service, 'getMappings').and.callThrough();
    spyOn(DataService, 'getTranslationMappings').and.callFake(function(){

        var defer = this.$q.defer();
        let data;

        switch(count) {
            case 0:
                data = dealers;
                break;
            case 1:
                data = daycount;
                break;
            case 2:
                data = frequency;
                break;
            case 3:
                data = ratestat;
                break;
            case 4:
                data = settlement;
                break;
        }

        defer.resolve({
            success: true,
            error: null,
            data: data
        });

        count++;

        return defer.promise;
    });

    service.getMappings(dealerId).then((data) => {
        resp = data;
    });

    scope.$digest();

    expect(service.getMappings).toHaveBeenCalled();
    expect(service.getMappings).toHaveBeenCalledWith(dealerId);
    expect(DataService.getTranslationMappings).toHaveBeenCalled();
    expect(DataService.getTranslationMappings.calls.count()).toEqual(5);
    expect(DataService.getTranslationMappings.calls.argsFor(0)).toEqual(['DEALER', dealerId]);
    expect(DataService.getTranslationMappings.calls.argsFor(1)).toEqual(['DAYCOUNT', dealerId]);
    expect(DataService.getTranslationMappings.calls.argsFor(2)).toEqual(['FREQUENCY', dealerId]);
    expect(DataService.getTranslationMappings.calls.argsFor(3)).toEqual(['RATE_STATIC', dealerId]);
    expect(DataService.getTranslationMappings.calls.argsFor(4)).toEqual(['SETTLEMENT_TYPE', dealerId]);
    expect(resp.dealers).toEqual(dealers);
    expect(resp.daycounts).toEqual(daycount);
    expect(resp.frequencies).toEqual(frequency);
    expect(resp.rateStatics).toEqual(ratestat);
    expect(resp.settlementTypes).toEqual(settlement);

});