Как вызвать метод (сервис), который внутри какого-либо метода использует жасмин юнит-тестирование - PullRequest
0 голосов
/ 12 апреля 2019

В контроллере

$scope.checkDuplicatePatients = function () {
            var systemIdentier = ''; // FIXME
            var givenName = $scope.patient.givenName || '';
            var familyName = $scope.patient.familyName || '';
            var gender = $scope.patient.gender || '';
            var birthDate = $scope.patient.birthdate || '';
            var phoneNumber = $scope.patient.PERSON_ATTRIBUTE_TYPE_PHONE_NUMBER || '';
            if ($scope.patient.address) {
                var subDivision = $scope.patient.address.address3 || '';
            }

            if ((givenName || familyName) && gender && birthDate) {
                patientService.searchDuplicatePatients(
                    systemIdentier,
                    givenName,
                    familyName,
                    birthDate,
                    gender,
                    phoneNumber,
                    subDivision
                ).then(function (response) {
                    $rootScope.numberOfDuplicatedPatients = response.length;
                    $rootScope.duplicatedPatients = response;
                });
            }
        };

заявлено в модульном тесте

var patientService = jasmine.createSpyObj('patientService', ['searchDuplicatePatients']); 

Внутри перед каждой функцией

describe('PatientCommonController', function () {

var $aController, $httpBackend, scope, appService, rootScope, patientAttributeService, $state;
var spinner = jasmine.createSpyObj('spinner', ['forPromise']);
var patientService = jasmine.createSpyObj('patientService', ['searchDuplicatePatients']); 
var $compile;

beforeEach(module('bahmni.registration', 'ngDialog'));

beforeEach(module(function ($provide) {
    $provide.value('patientAttributeService', {});
}));

beforeEach(
    inject(function ($controller, _$httpBackend_, $rootScope, _$compile_, _$state_) {
        $aController = $controller;
        $httpBackend = _$httpBackend_;
        scope = $rootScope.$new();
        $state = _$state_;
        rootScope = $rootScope;
        $compile = _$compile_;
    })
);


beforeEach(function () {
    appService = jasmine.createSpyObj('appService', ['getAppDescriptor']);
    rootScope.genderMap = {};

    scope.patient = {};

    appService.getAppDescriptor = function () {
        return {
            getConfigValue: function (config) {
                return true;
            },
            getExtensions: function() {
                return [];
            }

        };
    };

    $aController('PatientCommonController', {
        $scope: scope,
        $rootScope: rootScope,
        appService: appService,
        patientService: patientService
    });

    $httpBackend.whenGET(Bahmni.Common.Constants.globalPropertyUrl + '?property=concept.reasonForDeath').respond({});
    $httpBackend.when('GET', Bahmni.Common.Constants.conceptUrl).respond({});
    $httpBackend.flush();

});

Юнит тест

describe("Patient duplicate check", function () {
    it("should call patientService.searchDuplicatePatients when givenName, gender and birthDate are populated", function() {
        scope.patient.systemIdentier = 'BAH203007';
        scope.patient.givenName = 'Dhruv';
        scope.patient.familyName = 'Bhardwaj';
        scope.patient.gender = 'M';
        scope.patient.birthDate = '1993-12-18T00:00:00.000Z';
        scope.patient.PERSON_ATTRIBUTE_TYPE_PHONE_NUMBER = '987654321';
        scope.patient.address = 'BAYA HADJIDA';
        scope.checkDuplicatePatients = jasmine.createSpy("checkDuplicatePatients");
        scope.checkDuplicatePatients();
        expect(scope.checkDuplicatePatients).toHaveBeenCalled();
        expect(patientService.searchDuplicatePatients).toHaveBeenCalledWith('BAH203006', 'Kartik', 'Seth', '1993-03-18T00:00:00.000Z', 'M', '123456789', 'NGAOUNDAL');
    });

    it("should not call patientService.searchDuplicatePatients when givenName, gender or birthDate is not populated", function() {
        scope.patient.givenName = 'Dhruv';
        scope.checkDuplicatePatients = jasmine.createSpy("checkDuplicatePatients");
        scope.checkDuplicatePatients();
        expect(scope.checkDuplicatePatients).toHaveBeenCalled();
        expect(patientService.searchDuplicatePatients).not.toHaveBeenCalled(); /*Here is I want to unit test*/
   });
}) What is wrong here in the unit test

1 Ответ

0 голосов
/ 12 апреля 2019

Вы можете просто создать для него шпиона и проверить его, как только он должен был быть вызван:

let spy = spyOn(patientService, 'searchPatients').and.callThrough();

// check if called
expect(spy).toHaveBeenCalled();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...