Karma + angular -mocks TypeError: 'undefined' не является объектом (оценка 'angular.mock = {}')
Я пытаюсь написать модульные тесты, используя Karma + Jasmine, но столкнувшись с ошибкой с angular -mocks. При выполнении теста grunt я получаю следующую ошибку:
PhantomJS 1.9.8 (Mac OS X) ОШИБКА TypeError: 'undefined' не является объектом (оценка 'angular.mock = {}') в /Users/danielbogart/Documents/coding/work/AexNav/bower _components/ angular-mocks/angular- > mocks.js:17 Chrome 39.0.2171 (Mac OS X 10.9.4) ОШИБКА Uncaught TypeError: Невозможно установить свойство 'mock' из undefined at/Пользователи/danielbogart/Документы/кодирование/работа/AexNav/bower_components/angular -mocks/angular → mocks.js: 17
Конфигурация кармана Gruntfile:
karma: {
options: {
frameworks: ['jasmine'],
files: [
'dom_munger.data.appjs',
'tests/spec/*.js',
'bower_components/angular-mocks/angular-mocks.js'
],
logLevel: 'ERROR',
reporters: ['mocha'],
autoWatch: false, //watching is handled by grunt-contrib-watch
singleRun: true
},
all_tests: {
browsers: ['PhantomJS', 'Chrome']
},
during_watch: {
browsers: ['PhantomJS']
}
}
Спасибо!
Ответы
Ответ 1
Вам нужно будет включить angular.js, тогда только angular.mocks будет работать else window.angular будет undefined.
files: [
'dom_munger.data.appjs',
'path/to/angular.js', //<-- include angularjs
'bower_components/angular-mocks/angular-mocks.js',
'tests/spec/*.js'
],
Ответ 2
обновление для 2017 и webpack 2 (но то же самое angular < 2)
Итак, в тестах вам нужен заголовок вроде:
import angular from 'angular';
import 'angular-mocks/ngMock';
и замените каждую глобальную ссылку module
на angular.mock.module
Ответ 3
angular -mocks.js предполагает, что angular.js также включен.
Ответ 4
У меня была эта ошибка в следующем утверждении:
angular.mock.module( 'ui.router' )
Это было вызвано неправильным порядком в декларации библиотек:
karma.config.js:
...
files: ['./node_modules/angular-mocks/angular-mocks.js']
.concat(dependencies),
...
(dependencies
были списком моих angular.js
и содержащие angular.js
)
Я просто перемещаю './node_modules/angular-mocks/angular-mocks.js'
в список зависимостей, но ПОСЛЕ angular.js
:
Как это:
...
'./node_modules/angular/angular.js',
'./node_modules/angular-mocks/angular-mocks.js'
...
Чтобы идти дальше:
Если вы посмотрите на angular-mocks.js
то увидите, что для работы ему нужен angular.js
!
/**
* @license AngularJS v1.7.5
* (c) 2010-2018 Google, Inc. http://angularjs.org
* License: MIT
*/
(function(window, angular) {
'use strict';
/* global routeToRegExp: true */
...