programing

모킹 앵글Jasmine 유닛 테스트에서의 JS 모듈 의존성

topblog 2023. 4. 3. 21:09
반응형

모킹 앵글Jasmine 유닛 테스트에서의 JS 모듈 의존성

다른 모듈을 종속 모듈로 사용하는 모듈 내에서 테스트 컨트롤러 코드를 사용하려고 시도하고 있지만, 제대로 시뮬레이트하는 방법을 찾지 못했습니다.

Jasmine Framework를 사용하여 Karma(Testacular)로 테스트하고 있습니다.

모듈 코드

var app = angular.module('events', ['af.widgets', 'angular-table']);

app.controller('eventsCtrl', function([dependencies]){
    $scope.events = [];
    ...
});

사양 코드

describe('events module', function(){
    var $scope,
        ctrl;

    beforeEach(function(){
        angular.mock.module('af.widgets', []);
        angular.mock.module('angular-table', []);
        module('events', ['af.widgets', 'angular-table']);
    });

    beforeEach(inject(function($rootScope, $controller){
        $scope = $rootScope.new();
        ctrl = $controller('NameCtrl', {
            $scope: $scope,
        });
    }));

    it('should have an empty events array', function(){
        expect($scope.events).toBe([]);
    })
});

내가 받는 오류는 Karma가 "no module af"라는 것입니다.widgets"는 모듈 의존성을 조롱하는 것이 아닙니다.힌트 있나요?

1개 이상의 서비스를 선언하는 모듈을 시뮬레이션하려면 다음 코드를 사용합니다.

beforeEach(function(){
    module('moduleToMock');
    module(function ($provide) {
        $provide.value('yourService', serviceMock);
    });
});

이것은, 시뮬레이트 하는 서비스가 유닛 테스트(다른 Jasmine 설명)하는 서비스이기도 한 경우에 편리합니다.fscof에 의해 제안된 솔루션은 정상이지만 다음 테스트에 대한 단위 테스트를 생성할 수 없습니다.angular-table모듈.

제가 알아낸 건 다음과 같습니다.

karma.conf.js 파일에 'angular-table' 모듈을 로드하지 않았기 때문에 오류가 발생했습니다.처음에는 실제 테이블 모듈 없이 '이벤트' 모듈을 테스트하고 싶었기 때문에 의도적이었습니다.

테스트 폴더에 'mocks/angular-table.js'라는 새 파일을 만들고 다음 코드를 추가함으로써 'angular-table' 모듈을 쉽게 조롱할 수 있었습니다.

/mocks/mocks-table.syslog.disc

'use-strict';
angular.module('angular-table', []);

테스트하고 싶은 실제 '이벤트' 모듈과 함께 다음 파일을 카르마.conf.js 파일에 추가했습니다.

카르마.conf.displays

...
files = [
    JASMINE,
    JASMINE_ADAPTER,
    'scripts/libs/angular.js',
    'scripts/libs/angular-mocks.js',
    'scripts/events.js', // this is the real module.
    'scripts/mocks/*.js', //loads all custom mocks.
    'scripts/specs/*.spec.js' // loads my spec file.
] 
...

마지막으로 스펙 파일에서 두 모듈을 각각 이전 블록에서 호출하여 추가할 수 있었습니다.

사양/사양.스펙.스펙.

beforeEach(function(){
    module('angular-table');
    module('events');
});

이 투고로부터, 이러한 방법으로 파일을 구조화하는 아이디어를 얻었습니다.

나는 최근 Angular에서 모의 테스트를 해야 하는 ngInvedTesting을 출시했다.JS는 훨씬 쉬워.

이 경우 Jasmine 테스트에서 다음을 사용하십시오.

beforeEach(ModuleBuilder.forModule('events').serviceWithMocks('eventsCtrl').build());

ng Improved Testing에 대한 자세한 내용은 소개 블로그 포스트를 참조하십시오.http://blog.jdriven.com/2014/07/ng-improved-testing-mock-testing-for-angularjs-made-easy/

언급URL : https://stackoverflow.com/questions/17554727/mocking-angularjs-module-dependencies-in-jasmine-unit-tests

반응형