TypeError: 정의되지 않은 생성자가 아닙니다.
앵글은 처음이고 아직도 많은 걸 알아내려고 노력 중이야Yeoman Generator에서 생성한 Angular 1.5.8을 사용하여 테스트를 작성하고 있습니다.
구체적으로는 $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
다음 오류와 함께 기능에 장애가 발생하고 있습니다(낮음에도 문제가 없음).
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
$broadcast@bower_components/angular/angular.js:18005:33
bower_components/angular-ui-router/release/angular-ui-router.js:3353:32
processQueue@bower_components/angular/angular.js:16383:30
bower_components/angular/angular.js:16399:39
$eval@bower_components/angular/angular.js:17682:28
$digest@bower_components/angular/angular.js:17495:36
$apply@bower_components/angular/angular.js:17790:31
done@bower_components/angular/angular.js:11831:53
handleResponse@bower_components/angular-mocks/angular-mocks.js:1368:17
flush@bower_components/angular-mocks/angular-mocks.js:1808:26
test/spec/services/breadcrumbservice.js:33:27
invoke@bower_components/angular/angular.js:4718:24
workFn@bower_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
감사해요.
정의되지 않은 생성자가 아닙니다.
팬텀 오류 메시지입니다.정의되지 않은 함수를 호출하려고 하면 JS가 표시됩니다.팬텀의 ECMAScript 버전에 따라 달라집니다.JS는 지원합니다.그래서 당신이 말한 것처럼 이 브라우저는 당신이 테스트에서 사용하는 기능을 지원하기 때문에 크롬에서는 잘 작동합니다.문제를 해결하고 팬텀을 계속 사용할 수 있도록 하려면JS "팬텀에 알려지지 않음"을 대체할 수 있습니다.JS" 함수에는 대체 함수가 포함되어 있습니다.
는 ★★★★★★★★★★★★★★를 받고 있었다.TypeError: undefined is not a constructor
" " " "includes()
★★★★★★includes()
★★★★★★★★★★★★★★★★★」endsWith()
메서드는 2015에서는 되지 않습니다.되지 않습니다.JS.
인터넷 익스플로러되는 를 할 수 .indexOf()
method를 합니다.includes()
★★★★★★★★★★★★★★★★★」endsWith()
예를 들어, 제 경우 크롬에서는 모든 것이 잘 작동했지만, 테스트에서는 실패했습니다.
if (item.name.includes('contents'))
대신 index Of() 메서드를 사용합니다.
if (item.name.indexOf('contents') !== -1)
그리고 나는 더 이상 오류를 받지 않았다.
TypeError: 정의되지 않은 생성자가 아닙니다.
이 글을 답변으로 올릴지, 아니면 질문에 대한 편집으로 올릴지 고민했지만, (현재로서는) 제 답변인 것 같습니다.
팬텀과 관련된 문제인 것 같습니다.JS. karma.conf.js 파일에서 엔진을 Chrome으로 변경하자마자 해당 테스트는 통과했습니다.
그 에러 메세지가 무엇을 의미하는지, 왜 팬텀에서는 동작하지 않는지를 아직 모릅니다.JS, 그래도 난 이제 계속할 수 있어.
다음은 제 카르마.conf.js에 대한 수정 사항입니다(궁금하신 분들을 위해).
browsers: [
//'PhantomJS',
'Chrome'
],
// Which plugins to enable
plugins: [
'karma-chrome-launcher',
//'karma-phantomjs-launcher',
'karma-jasmine'
],
그건 그렇고, 난 알아챘어endsWith
는 ECMAScript6(오래된 줄 알았는데)에서는 처음이지만 WebStorm에서는 angular-ui-grid의 도우미 기능을 참조하고 있습니다.난 꽤 오랜 시간을 허비했어files
karma.conf.conf.conf 파일의 어레이를 사용하여 ui-grid 의존관계가 너무 늦게 로드되었는지 여부를 확인합니다.모든 테스트에서 Chrome에서는 정상적으로 동작했지만 Phantom에서는 동작하지 않았다.JS. 왜 그랬는지 모르겠어요.
내 경우: 원인이 되는 순환 의존 관계:
PhantomJS 2.1.1 (Windows 8 0.0.0) 오류 유형 오류: 정의되지 않은 것은 생성자가 아닙니다('(0, _actions.prefix'(' 평가 중).SET_USER_INPUT_PHONE_NUMBER'')는 정의되지 않은 상태:12
javascript 제작코드(ES6 구문 babel/webpack으로 컴파일)에 Import를 추가해도 같은 에러가 발생하였습니다.응용 프로그램의 프로덕션 빌드가 크롬으로 로드되었지만 팬텀을 사용하여 테스트를 실행했을 때 변경 사항은 양호했습니다.JS에서 오류가 발생했습니다.제 경우 추가된 Import에 의해 주기적인 의존관계가 생성되었습니다.
나중에 참고할 수 있도록(몇 주 전에 같은 문제에 부딪혔고, 몇 주 후에 다시 머리를 긁히고 싶지 않습니다), 그리고 같은 오류를 구글에서 검색하기 위해 이 내용을 여기에 둡니다.
나는 팬텀에서 비슷한 오류에 직면했다.JS:
나에게 있어 오류는 내가 서비스를 위해 스파이 오브젝트를 만드는 방식이었다.
코드 파일의 온라인 오류new Service.getData(param1, param2)
테스트 파일에서 수정:jasmine.createSpyObj('Service',['getData'])
부족한 것은 추가입니다.['getData]
spyObj 작성 중
언급URL : https://stackoverflow.com/questions/38928987/typeerror-undefined-is-not-a-constructor
'programing' 카테고리의 다른 글
교차 도메인 Ajax가 보안 문제가 되는 이유는 무엇입니까? (0) | 2023.03.23 |
---|---|
Vim 및 Syntastic에서 발생하는 각 방향성 보풀 오류를 무시하려면 어떻게 해야 합니까? (0) | 2023.03.23 |
angularJ의 숫자에 1000개의 구분 쉼표를 추가하는 방법은 무엇입니까? (0) | 2023.03.23 |
Wordpress 게시물/페이지에 위젯을 단축코드로 추가하는 방법은 무엇입니까? (0) | 2023.03.18 |
Jenkins 오류 - 문서 프레임이 샌드박스에 저장되고 '스크립트 허용' 권한이 설정되지 않아 에서 스크립트 실행이 차단되었습니다. (0) | 2023.03.18 |