2014-12-23 99 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(); 
    }); 
});