【问题标题】:Expected undefined to be defined How do i fix it预期未定义要定义我该如何解决
【发布时间】:2016-06-06 10:10:43
【问题描述】:

我正在尝试使用 Jasmine 测试我的 Angular,但不知何故,我一直收到此错误,预计未定义将被定义,我遵循了我在平均堆栈上的 Angular 文档示例

test.js

describe('测试 Ecdreport 控制器', function(){ var $scope,控制器;

var app = angular.module('mean.ecdreport',[])
.controller('EcdreportController', ['$scope', '$http', 'Global', 'Ecdreport', function($scope, $http, Global, Ecdreport) {
    $scope.global = Global;
    $scope.query = "";
    $scope.package = {
        name: 'ecdreport'
    };
    

            $scope.startDate = null;
            $scope.endDate = null;
            $scope.currentPage = 1;
            $scope.child= [];
            $scope.maxSize = 5;
            $scope.items = [];
            $scope.itemsPerPage = 10;
            $scope.totalItems = null;
            $scope.direction = 1;
            $scope.directionOld = 1;
            $scope.sortAttributes = 0;
            $scope.sortAttributesOld = 0;
            $scope.datamodel = null;
     

        $scope.getDataModel = function() {
           
            $http({url:'/api/v1/getdatamodel', method:"GET"})
                .success(function(data) {
                    console.log('Datamodel successful');
                    $scope.datamodel = data[0];
                    console.log('datamodel', data);
                   
                })
                .error(function(error) {
                    $scope.datamodel =[];
                });
        }
     //   console.log("Trying to get datamodel");
        $scope.getDataModel();
     });
                                    
                                    
                                    
   describe('Testing Ecdreport Controllers', function(){
	var $scope, controller;

	beforeEach(module('mean.ecdreport', function($controllerProvider){
 		$controllerProvider.register('EcdreportController', function(){
 		});
	}));
                                    
                                    
      beforeEach(inject(function(_$rootScope_,_$controller_){
			$scope = _$rootScope_.$new();
			controller = _$controller_('EcdreportController',
				{$scope : $scope
				});
		}));
	
	
	it('Should be registered', function(){
		expect(controller).toBeDefined();
	})

	it('Testing Scope', function(){
		expect($scope).toBeDefined()
		expect($Scope.getDataModel).toBeDefined();
	})

	
	
});                                 
                                    
                                    
                                    
   
beforeEach(module('mean.ecdreport', function($controllerProvider){
    $controllerProvider.register('EcdreportController', function(){
    });
}));


    beforeEach(inject(function(_$rootScope_,_$controller_){
        $scope = _$rootScope_.$new();
        controller = _$controller_('EcdreportController',
            {$scope : $scope
            });
    }));


it('Should be registered', function(){
    expect(controller).toBeDefined();
})

it('Testing Scope', function(){
    expect($scope).toBeDefined()

    expect($scope.getDataModel).toBeDefined();
})

});

【问题讨论】:

    标签: jasmine karma-runner


    【解决方案1】:

    您收到该错误是因为您的测试控制器从未定义过。你需要使用var controller = ...

    你应该像这样使用控制器注入:

    beforeEach(inject(function(_$rootScope_,_$controller_){
        $scope = _$rootScope_.$new();
        createController = function() {
            return _$controller_('EcdreportController', {
               $scope : $scope
            });
        };
    }));
    

    并像这样在每个测试中初始化控制器:

    it('Should be registered', function(){
        var controller = new createController();
        expect(controller).toBeDefined();
    })
    

    这样,如果您的控制器需要传递任何数据,您还可以在每个测试中传递不同的参数。

    【讨论】:

    • 感谢 Tom Shen,当我定义它时控制器确实通过了,但是控制器内的所有内容都失败了仍然给我同样的错误(预期未定义),就像尝试定义 $scope.getDataModel.even 即使我初始化控制器 it('应该注册', function() { expecte($scope.getDataModel()).toBeDefined() })
    猜你喜欢
    • 1970-01-01
    • 2022-07-03
    • 2013-10-12
    • 2020-04-13
    • 1970-01-01
    • 2018-12-30
    • 1970-01-01
    • 2022-06-22
    • 2019-12-04
    相关资源
    最近更新 更多