Angularjs单元测试错误

时间:2014-03-13 11:54:47

标签: node.js angularjs unit-testing testing

我是编写单元测试的新手。我正在尝试简单的事情,在我的saveInfo函数中,控制器$scope.practice应该包含一个值。

我正在使用webstorm来运行我的测试。我想检查$ {1}}函数是否已定义$ scope.practice。

test / practice.js

saveInfo

practice.js - controller

'use strict';
describe('myApp', function() {
    describe('Controller: PracticeCtrl', function () {
        var $http, $scope, $routeParams, $location, $locale, $timeout;
      // load the controller's module
        beforeEach(function () {
            // Load the controller's module
            module('myApp');

            inject(function ($controller, $rootScope) {
                $scope = {};
            });

        });

        it('should define a practice property', function () {
            expect($scope.practice).toBeDefined();
        });

    });
});

给我错误: -

angular.module('myApp').controller('PracticeCtrl', function ($http, $scope, $routeParams, $location, $locale, $timeout) {

$scope.saveInfo = function () {
        $scope.practice = '52300099';
        Practices.updateStampApproval().updateInfo($scope.practice);  

 };

$scope.updateInfo = function () {
   ....
}

$scope.getInfo = function () {
   ....
}

在我的控制器Expected undefined to be defined. Error: Expected undefined to be defined. 中定义。那么为什么它会显示错误。

如何测试$scope.practice智能意味着我如何编写测试,该测试仅检查控制器中的1个函数,例如'saveInfo'?

1 个答案:

答案 0 :(得分:2)

您正在将$scope初始化为空对象,并且未在任何地方进行操作。这就是你的测试失败的原因。

你应该做什么:

  1. 使用虚拟$scope
  2. 初始化您的控制器
  3. 在每个测试中调用每个控制器方法
  4. 在每个测试中做出断言
  5. 例如:

    describe('myApp', function() {
        describe('Controller: PracticeCtrl', function () {
            var $http, $scope, $routeParams, $location, $locale, $timeout, practiceCtrl;
    
            // load the controller's module
            beforeEach(function () {
                // Load the controller's module
                module('myApp');
    
                inject(function ($controller, $rootScope) {
                    $scope = $rootScope.$new();
                    practiceCtrl = $controller("PracticeCtrl", {
                        $scope: $scope
                    });
                });
    
            });
    
            it('should define a practice property', function () {
                $scope.saveInfo();
                expect($scope.practice).toBeDefined();
            });
    
        });
    });
    

    我希望我能够帮助你。