Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 茉莉花&x2B;因果报应+;角度测试创建控制器_Javascript_Angularjs_Jasmine_Karma Jasmine - Fatal编程技术网

Javascript 茉莉花&x2B;因果报应+;角度测试创建控制器

Javascript 茉莉花&x2B;因果报应+;角度测试创建控制器,javascript,angularjs,jasmine,karma-jasmine,Javascript,Angularjs,Jasmine,Karma Jasmine,我哪里出错了?如何获得Jasmine+angular中的控制器实例?如何解析控制器?我不知道应该用什么来解决这个问题 'use strict'; angular.module('myApp.contact', ['ui.router']) .controller('contactCtrl', ['$scope', function ($scope) { $scope.contact = { name: 'John Doe' }; }]); describe(

我哪里出错了?如何获得Jasmine+angular中的控制器实例?如何解析控制器?我不知道应该用什么来解决这个问题

'use strict';

angular.module('myApp.contact', ['ui.router'])
.controller('contactCtrl', ['$scope', function ($scope) {
    $scope.contact = {
        name: 'John Doe'
    };
}]);


describe('myApp.contact module tests', function () {
    var scope, createController;

    beforeEach(inject(function ($rootScope, $controller) {
        scope = $rootScope.$new();

        createController = function () {
            return $controller('contactCtrl', {
                '$scope': scope
            });
        };
    }));

    it('contact name is John Doe', function () {
        var controller = createController();
        expect(controller).toEqual('John Doe');
    });
});

myApp.contact module tests
    ✗ contact name is John Doe
        Error: [ng:areq] Argument 'contactCtrl' is not a function, got undefined
        http://errors.angularjs.org/1.4.9/ng/areq?p0=contactCtrl&p1=not%20a%20function%2C%20got%20undefined
            at E:/angular-seed/app/bower_components/angular/angular.js:68:12
            at assertArg (E:/angular-seed/app/bower_components/angular/angular.js:1816:11)
            at assertArgFn (E:/angular-seed/app/bower_components/angular/angular.js:1826:3)

你在这里错过了好几件事

  • 您需要初始化angular module(角度模块)以使控制器和所有其他组件可用,方法是在每个模块之前执行
    模块('myApp.contact')
    ,以便
    错误:[ng:areq]参数“contactCtrl”不是函数,未定义的
    将消失
  • 然后在测试的Assert语句中,您应该使用
    范围
    对象而不是
    控制器
    (当您的属性绑定到
    时,您可以使用控制器)
  • 别忘了参考第页的
    contactCtrl.js
    ui-router.js

    expect(scope.contact.name).toEqual('John Doe');
    
  • 代码

    describe('myApp.contact module tests', function () {
        var scope, createController;
        beforeEach(module('myApp.contact')); //1st change
    
        beforeEach(inject(function ($rootScope, $controller) {
            scope = $rootScope.$new();
            createController = function () {
                return $controller('contactCtrl', {
                    '$scope': scope
                });
            };
        }));
    
        it('contact name is John Doe', function () {
            var controller = createController();
            expect(scope.contact.name).toEqual('John Doe'); //2nd change
        });
    });
    

    模块(myApp.contact);表示myApp未定义,我尝试将其更改为模块('myApp.contact');错误:喷油器已创建,无法注册模块!在karma.conf.js中,我有所有文件included@PeterPan用单引号包装,我错过了第一次包装,但抛出:错误:注入器已经创建,无法注册模块@PeterPan之所以发生这种情况,是因为我们在每个
    之前的
    内部使用
    函数inject()
    ,在模块初始化之前,我们应该先加载角度模块。好的,我该怎么做?