Я очень новичок в Angular, и я пытаюсь понять, что из этого все равно. Я пишу некоторые тесты, используя Angular 1.5.8, которые я создал из Yeoman Generator.TypeError: undefined не является конструктором
В частности, я пытаюсь понять, как манипулировать $ httpBackend результатов (я не уверен, если это важно или нет) ...
В моем app.js файл У меня есть следующий код:
.run(['$rootScope', '$location', 'breadcrumbService', function ($rootScope, $location, breadcrumbService) {
$rootScope.$on('$viewContentLoaded', function() {
jQuery('html, body').animate({scrollTop: 0}, 200);
});
$rootScope.isEditMode = false;
$rootScope.$on('$stateChangeSuccess', function() {
// ------------ this next line is failing -----------
$rootScope.isEditMode = $location.path().toLowerCase().endsWith('/edit') || $location.path().toLowerCase().endsWith('/new');
});
$rootScope.parseJson = function (value) {
return angular.fromJson(value);
};
$rootScope.bc = breadcrumbService;
$rootScope.title = "";
}])
Линия, расположенная примерно на полпути (где я добавил комментарий), терпит неудачу. В частности, функция endsWith
не удается (TOLOWER отлично), с этой ошибкой:
PhantomJS 2.1.1 (Windows 8 0.0.0) Service: breadcrumbService should return breadcrumb label in json format FAILED
TypeError: undefined is not a constructor (evaluating '$location.path().toLowerCase().endsWith('/edit')') in app/scripts/app.js (line 44)
app/scripts/app.js:44:72
[email protected]_components/angular/angular.js:18005:33
bower_components/angular-ui-router/release/angular-ui-router.js:3353:32
[email protected]_components/angular/angular.js:16383:30
bower_components/angular/angular.js:16399:39
[email protected]_components/angular/angular.js:17682:28
[email protected]_components/angular/angular.js:17495:36
[email protected]_components/angular/angular.js:17790:31
[email protected]_components/angular/angular.js:11831:53
[email protected]_components/angular-mocks/angular-mocks.js:1368:17
[email protected]_components/angular-mocks/angular-mocks.js:1808:26
test/spec/services/breadcrumbservice.js:33:27
[email protected]_components/angular/angular.js:4718:24
[email protected]_components/angular-mocks/angular-mocks.js:3085:26
Вот мой тестовый код (некоторые нежелательным модифицирован из различных примеров - просто пытаюсь заставить его работать):
'use strict';
describe('Service: breadcrumbService', function() {
// load the service's module
beforeEach(module('myModule'));
var $httpBackend, $rootScope, createController, authRequestHandler;
beforeEach(inject(function($injector) {
$httpBackend = $injector.get('$httpBackend');
console.log('Is null? '+ ($httpBackend == null));
$httpBackend.whenGET(/views\/.*/).respond(200, [{}, {}, {}]);
authRequestHandler = $httpBackend.when('GET', '/api/v1/SiteStagings')
.respond({userId: 'userX'}, {'A-Token': 'xxx'});
// Get hold of a scope (i.e. the root scope)
$rootScope = $injector.get('$rootScope');
$httpBackend.flush();
}));
// instantiate service
var breadcrumbService;
beforeEach(inject(function (_breadcrumbService_) {
breadcrumbService = _breadcrumbService_;
}));
it('svc should exist', function() {
expect(!!breadcrumbService).toBe(true);
});
it('should return breadcrumb label in json format', function() {
var result = breadcrumbService.getFromCache('site', 'SiteGroupStagings', 46, 'SiteGroupDesc');
console.log(result);
expect(!!result).toBe(true);
});
});
Я не сомневаюсь, что здесь что-то не так, я просто не могу понять, что это такое. Что действительно означает эта ошибка, и почему мне не нравится мой звонок до endsWith
?
Благодаря
У меня есть аналогичные проблемы с PhantomJS. В большинстве случаев все тесты проходят, но в других случаях все они терпят неудачу с той же ошибкой «TypeError: undefined не является конструктором (оценка ...). Только происходит с PhantomJS в Windows. Использование Chrome ошибок никогда не происходит. –