2014-12-23 4 views
0

Я пытаюсь настроить тестирование на углы с кармой и жасмином. Я успешно установил и настроил Karma, но у меня проблемы с использованием угловых макетов. Ниже в 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 

Chrome 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.

Вам также не нужно тестировать $controller, это угловое обслуживание. Проверьте вместо этого свой контроллер.

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(); 
    }); 
}); 
Смежные вопросы