Как насмехаться над приватным методом, используя жасмин? - PullRequest
0 голосов
/ 31 октября 2019

Попытка смоделировать закрытый метод, который находится в классе, не может быть успешной, я использую jasmine, поэтому в приведенном ниже коде у меня есть getDrug метод, который выполняет http-вызов, Теперь я могу смоделировать ядро, но как мне заглушитьмакет getDrug, чтобы охват кода можно было улучшить.

DrugPriceApi.node.ts

export class DrugPriceApi extends Types.ModuleBase < DrugPriceParam, DrugPriceResultSet[] > {

        private _memberId: string = "";
        private _dependencies: any;
        private errorMessage: string = "There was an issue while retrieving drug price. Please try again.";

        before(args: DrugPriceParam): Promise < DrugPriceParam > {
            args.daysSupply = args.daysSupply ? args.daysSupply : args.appName === "VOYA" ? "90" : "BLNK";
            return Promise.resolve(args);
        }

        core(args: DrugPriceParam, requestMethod: Interface.Core.RequestMethod, _dependencies: any): Promise < any > {
                this._dependencies = _dependencies;

                return new Promise < any > ((resolve: Function, reject: Function) => {
                        this.getDrug(function(resolve) {
                                resolve( //response here);});
                                }
                            }

                        }
                    }
                }

                private getDrug(args: DrugPriceParam, requestMethod: Interface.Core.RequestMethod) {
                    return requestMethod.http.makeRequest({
                        url: {
                            name: 'domain_getDrug',
                            params: {
                                version: '1.0',
                                appName: args.appName ? args.appName : 'WEB',
                                tokenId: args.tokenId,
                                refId: args.refId,
                                internalID: args.memberInfo.internalID,
                                searchText: args.drugName,
                                drugNdcId: 'BLNK'
                            }
                        },
                        body: {
                            memberInfo: args.memberInfo
                        }
                    });
                }

DrugPriceApi.spec.ts

       import {
            DrugPriceApi
        } from "./DrugPriceApi.node";

        it("should get drugByName", function(done) {
            let getDrug: any;
            beforeEach((done) => {
                function getMockData(url: string): Promise < any > {
                    const rtnval = {
                        "details": [],
                        "header": {
                            "statusDesc": "Success",
                            "statusCode": "0000",
                            "IndexOfRequestThatFailed": []
                        }
                    };

                    return Promise.resolve(rtnval);
                }

                let moderator: Interface.Mock.Handler = {
                    getMockData: getMockData
                };
                getDrug = moderator;

            });
            let param: any;
            param.daysSupply = "BLNK";
            param.quantity = "BLNK";
            param.memberId = "1372";
            const result: any = _sdkInstance.SDK.Pricing.getDrugPrice(param);
            result.then(function(res: any) {
                spyOn(DrugPriceApi.prototype, "core").and.callFake(() => {
                        expect(DrugPriceApi.prototype.getDrug).toHaveBeenCalled();
                });
                expect(res.Header.StatusCode).toBe("5000");
                done();
            });
        });

1 Ответ

0 голосов
/ 01 ноября 2019

Я немного смущен тем, что здесь происходит, и почему DrugPriceApi тестируется косвенно. Похоже, мы тестируем Pricing.getDrugPrice вместо DrugPriceApi.

Если вы хотите протестировать DrugPriceApi.core, вам просто нужно создать его экземпляр и установить DrugPriceApi.getDrug = jasmine.createSpy ();

const api = new DrugPriceApi();
api.getDrug = jasmine.createSpy();
api.core(...whatever).then(() => {
    expect(api.getDrug).toHaveBeenCalled();
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...