2014-12-23 102 views
0

我试图设置测试角与噶玛和茉莉花。我已经成功安装并配置了Karma,但我在使用angular-mocks时遇到了问题。下面在aTest.spec.js中包含一个简单的应用程序,控制器和测试规范来说明问题。谁能告诉我我做错了什么?从噶

我的控制台输出:

Chrome 39.0.2171 (Mac OS X 10.8.5) ControllerForTest encountered a declaration exception FAILED 
TypeError: undefined is not a function 
    at Suite.<anonymous> (/Users/duncanmalashock/python_projects/scout/public/tests/unit/aTest.spec.js:19:20) 
    at jasmineInterface.describe (/Users/duncanmalashock/python_projects/scout/node_modules/karma-jasmine/lib/boot.js:59:18) 
    at /Users/duncanmalashock/python_projects/scout/public/tests/unit/aTest.spec.js:13:1 

铬39.0.2171(Mac OS X的10.8.5)○:执行1的1(1 FAILED)ERROR(0.004秒/ 0.002秒)

karma.conf.js:

... 
files: [ 
    'http://ajax.googleapis.com/ajax/libs/angularjs/1.3.5/angular.min.js', 
    'angular/vendor/angular-mocks.js', 
    'tests/unit/*.spec.js' 
], 
... 

控制器:

var testApp = angular.module('testApp', []); 

testApp.controller('ControllerForTest', ['$scope', 
    function($scope) { 
    $scope.data = { 
     a: 'foo', 
     b: 'bar', 
     c: 'baz' 
    }; 
    } 
]); 

aTest.spec.js:

describe('ControllerForTest', function() { 
    module('testApp'); 
    var $controller; 
    inject(function(_$controller_) { 
     $controller = _$controller_; 
    }); 
    var controller = $controller('ControllerForTest'); 
    it('is defined', function() { 
    expect($controller).toBeDefined(); 
    }); 
}); 

回答

0

模块实例化和服务注射应该在一个beforeEach发生,不能直接内的describe块。这将使它们可用于以下每个it s。

你也不需要测试$controller,这是一个Angular服务。测试你的控制器。

describe('ControllerForTest', function() { 
    var $controller; 
    var ControllerForTest; 

    beforeEach(function() { 
    module('testApp'); 

    inject(function(_$controller_) { 
     $controller = _$controller_; 
    }); 
    }); 

    it('is defined', function() { 
    // This line can also be in the beforeEach. 
    // Saves having to repetitively instantiate the controller. 
    ControllerForTest = $controller('ControllerForTest'); 

    expect(ControllerForTest).toBeDefined(); 
    }); 
});