programing

TypeError: 정의되지 않은 생성자가 아닙니다.

codeshow 2023. 3. 23. 22:57
반응형

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의 도우미 기능을 참조하고 있습니다.난 꽤 오랜 시간을 허비했어fileskarma.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

반응형