Ответ 1
Изменение в файле karma.conf.js
logLevel: config.LOG_INFO,
к
logLevel: config.LOG_DEBUG,
и PhantomJS для Firefox, тогда вы получите более подробное сообщение об ошибке
Я сталкиваюсь с этой ошибкой при написании теста для директивы (используя generator-angular-module
):
ЦСИ /capitalize.js:
'use strict';
angular.module('jviotti.string', []).filter('capitalize', function() {
return function(input) {
return input.replace(/\w\S*/g, function(txt) {
return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
});
};
});
тест/спецификации/capitalize.js:
'use strict';
describe('Filter: capitalize', function () {
// load the controller module
beforeEach(module('jviotti.string'));
var capitalize;
beforeEach(inject(function($filter) {
capitalize = $filter('capitalize');
}));
it('should capitalize a string', function () {
expect(capitalize('hello')).toBe('Hello');
});
});
Однако при запуске Karma с PhantomJS я получаю:
PhantomJS 1.9.2 (Mac OS X) Filter: capitalize should capitalize a string FAILED
TypeError: Attempted to assign to readonly property.
at workFn (/Users/jviotti/Projects/angular-string/bower_components/angular-mocks/angular-mocks.js:2107)
TypeError: 'undefined' is not a function (evaluating 'capitalize('hello')')
at /Users/jviotti/Projects/angular-string/test/spec/capitalize.js:14
PhantomJS 1.9.2 (Mac OS X): Executed 2 of 2 (1 FAILED) (0.1 secs / 0.017 secs)
Что мне не хватает?
Изменение в файле karma.conf.js
logLevel: config.LOG_INFO,
к
logLevel: config.LOG_DEBUG,
и PhantomJS для Firefox, тогда вы получите более подробное сообщение об ошибке
Альтернатива этому (в Angular 1.2.2) комментирует строку 2107 в файле angular -mocks.js:
if(e.stack && errorForStack) e.stack += '\n' + errorForStack.stack;
По-видимому, в PhantomJS стек ошибок доступен только для чтения.
Edit:
Эта ошибка больше не должна возникать в Angular 1.2.10+ (github.com/angular/angular.js/pull/5047) (Спасибо sherlocken!)
Я также вижу эту проблему в v1.2.5. Кажется, это регрессия в angular -mocks.js: https://github.com/angular/angular.js/pull/5047
Вы можете вручную исправить angular -mocks.js из этого diff: https://github.com/wizardwerdna/angular.js/commit/17515763b891ea617339610fe92079cefe0efbbe
Возможно, вам поможет обновление до версии 1.2.10, что приведет к слиянию проблемы с PhantomJS и некоторыми другими браузерами. См. https://github.com/angular/angular.js/pull/5047 и https://github.com/angular/angular.js/tree/v1.2.10.
Добавили ли вы ссылки на js файлы в верхней части вашей спецификации, например ниже
/// <reference path="../../../bower_components/angular/angular.js" />
/// <reference path="../../../bower_components/angular-route/angular-route.js" />
/// <reference path="../../../bower_components/angular-ui-router/release/angular-ui-router.js" />
/// <reference path="../../../bower_components/jasmine/lib/jasmine-core/jasmine.js" />
/// <reference path="../../../bower_components/jasmine/lib/jasmine-core/jasmine-html.js" />
/// <reference path="../../../bower_components/jasmine/lib/jasmine-core/boot.js" />
/// <reference path="../../../bower_components/angular-mocks/angular-mocks.js" />
ПРИМЕЧАНИЕ. angular -mocks.js должен быть после angular.js и перед вашими тестовыми файлами