Получение метода как неопределенного при выполнении теста кармы - PullRequest
0 голосов
/ 30 мая 2019

Я создал метод области действия внутри моего контроллера, который выполняется при нажатии кнопки. Я пишу тестовые случаи для того же. Я ввел свой модуль в блок beforeEach и создал spyon мою функцию видимости, а затем использовал ее в методе 'it' и проверял, вызывается ли он или нет. Но получение ошибки как метода не найдено.

Контроллер

    'use strict';

angular.module('myApp.view1', ['ngRoute'])

  .config(['$routeProvider', function ($routeProvider) {
    $routeProvider.when('/view1', {
      templateUrl: 'view1/view1.html',
      controller: 'View1Ctrl'
    });
  }])

  .controller('View1Ctrl', ['$scope',View1Ctrl])

  function View1Ctrl($scope) {
    $scope.user = {
      name: '',
      last: ''
    }
    $scope.showFormData = function() {
      $scope.formData = $scope.user.name + $scope.user.last;
    }
  }

spec.js

   'use strict';

describe('myApp.view1 module', function () {

  var $controller, $rootScope;
  beforeEach(module('myApp.view1'));

  beforeEach(inject(function (_$controller_, _$rootScope_) {
    $controller = _$controller_;
    $rootScope = _$rootScope_;
  }));

  describe('view1 controller', function () {

    var $scope, controller, formData;
    beforeEach(function () {
      $scope = $rootScope.$new();
      controller = $controller('View1Ctrl', {
        $scope: $scope
      });
      spyOn(controller, 'showFormData');
    });

    it('should check for the show form details', function () {
      $scope.user.name = "Sandeep";
      $scope.user.last = "Gupta";
      expect($scope.showFormData).toHaveBeenCalled();
      expect($scope.user.name + $scope.user.last).toEqual(firstname);
    });

  });
});

Нужна помощь для решения этой проблемы.

1 Ответ

0 голосов
/ 30 мая 2019

Похоже, вы пытаетесь шпионить за методом showFormData контроллера:

  spyOn(controller, 'showFormData');

Однако showFormData не существует на контроллере, это метод области действия контроллера.

Вам нужно будет использовать:

  spyOn($scope, 'showFormData');

Также важно знать, что вам нужно использовать один и тот же объект и для spyOn, и для ожидающего (...). ToHaveBeenCalled ().В вашем случае вы шпионили за controller.showFormData (), но ожидали вызова $ scope.showFormData ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...