각도 반환 모듈의 테스트 서비스가 정의되지 않았습니다 같습니다. basePath =

내 프로젝트 (GitHub의 Angular Seed 프로젝트에서 가져온)에서 기본 서비스 단위 테스트를 실행하려고하는데 “모듈이 정의되지 않았습니다”라는 오류가 계속 발생합니다.

참조 된 JavaScript 파일 의 순서와 관련이있을 수 있지만 작동하지 않는 것 같습니다. 그래서 도움이 될 수 있기를 바랍니다.

테스트 구성은 다음과 같습니다.

basePath = ‘../’;

파일 = [
”public / javascripts / lib / jquery-1.8.2.js ‘,
‘public / javascripts / lib / angular.js ‘,
‘public / javascripts / lib
/ angular-
.js ‘,
‘public / app.js ‘,
‘public / controllers /
.js ‘,
‘public / directives.js ‘,
‘public / filters.js ‘,
‘public / services.js ‘,
JASMINE,
JASMINE_ADAPTER,
‘public / javascripts / lib / angular-mocks. js ‘,
‘test / unit / *. js ‘];

자동 감시 = true;

브라우저 = [ ‘Chrome’];

junitReporter = {outputFile : ‘test_out / unit.xml’, 제품군 : ‘unit’};

서비스는 다음과 같습니다.

angular.module('myApp.services', []).
  value('version', '0.1');

테스트는 다음과 같습니다.

'use strict';

describe('service', function() {
  beforeEach(module('myApp.services'));


  describe('version', function() {
    it('should return current version', inject(function(version) {
      expect(version).toEqual('0.1');
    }));
  });
});

그리고 testacular를 통해 테스트를 실행할 때의 오류는 다음과 같습니다.

ReferenceError : 모듈이 정의되지 않았습니다



답변

angular-mocks.js 파일 이 없습니다 .


답변

나는 같은 문제가 있었고 왜 작동하지 않는지 이해했다 . angular-mocks.js 파일 전에 jasmine.js 자바 스크립트 를 참조해야 합니다. 실제로 angular-mocks.js는 Jasmine 이로 드되었는지 확인하고 모듈 기능이 창에 추가되는지 확인합니다.

Angular Mocks 코드 의 추출 은 다음과 같습니다 .

(아래에있는 ‘해킹’에 대한 몇 가지 주석 후에 편집하십시오 : 이것은 코드의 추출에 불과합니다.이 코드는 스스로 작성해야 할 것이 아닙니다.

window.jasmine && (function(window) {

[...]

  window.module = angular.mock.module = function() {
    var moduleFns = Array.prototype.slice.call(arguments, 0);
    return isSpecRunning() ? workFn() : workFn;
    /////////////////////
    [...]
  };

간단히 말해서 : angular-mocks.js 전에
jasmine.js 참조 하면됩니다.


답변

window.module함수는 angular-mocks.js로 제공되며 의 약어입니다 angular.mock.module. 에서 언급 한 바와 같이 워드 프로세서module기능은 재스민 작동합니다.

Testacular를 사용 하면 다음 예제 구성 파일이로드 angular-mocks.js됩니다.

/** example testacular.conf.js */

basePath = '../';
files = [
  JASMINE,
  JASMINE_ADAPTER,
  'path/to/angular.js',
  'path/to/angular-mocks.js',   // for angular.mock.module and inject.
  'src/js/**/*.js',             // application sources
  'test/unit/**/*.spec.js'      // specs
];
autoWatch = true;
browsers = ['Chrome'];

그리고 다른 곳에서 제안한 것처럼 디버그 로깅으로 Testacular를 실행하여로드 된 스크립트를 확인할 수 있습니다 (검사기에서도 동일하게 볼 수 있음).

testacular --log-level debug start config/testacular.conf.js

angular.mock.inject문서는 꽤 완전한 예제를 포함한다.


답변

단위 테스트에서 ‘angular’없이 ‘module’을 사용하면 정상적으로 작동합니다.

CoffeeScript :

describe 'DiscussionServicesSpec', ->
    beforeEach module 'DiscussionServices'
    beforeEach inject ... etc.

어떤 컴파일

자바 스크립트 :

describe('DiscussionServices', function() {
    beforeEach(module('DiscussionServices'));
    beforeEach(inject(function ... etc.

내가 설명 한 오류와 같은 것을 볼 수있는 유일한 시간은 testacular.conf.js 파일에서 angular-mocks.js 파일이 ‘모듈’을 사용하려고 시도하기 전에 파일 섹션에 나열되어 있지 않은 경우입니다. 테스트 후 ‘파일’목록에 넣으면 얻을 수 있습니다.

ReferenceError: Can't find variable: module

(우리의 테스트는 PhantomJS를 통해 실행됩니다)


답변

Karma 구성에 angular-mocks.js를 포함했지만 여전히 오류가 발생했습니다. 파일 배열에서 순서가 중요하다는 것이 밝혀졌습니다. (duh) html 문서의 헤드에서와 같이 스크립트가 정의되기 전에 각도를 호출하면 오류가 발생합니다. 그래서 방금 angular.js와 angular-mocks.js 뒤에 app.js를 포함시켜야했습니다.


답변

Yeoman과 각 생성기를 사용하는 경우이 오류가 발생합니다. 특히 튜토리얼 (._.)
을 할 때 angular-mocks.js 파일을 bower_components / angular-mocks 디렉토리에서 test / mock 디렉토리로 복사하여 수정했습니다. 물론 karma.conf.js 파일이 올바르게 구성되어 있는지 확인해야합니다.

인사말!


답변

내가 같은 일을 할 때도 같은 문제가있었습니다 var module = angular.module('my',[]). IIFE에 둘러싸여 있는지 확인해야했습니다.