2014-09-17 2 views
4
내가 카르마/자스민 모든

RequireJS가 제대로 카르마와 타이프 라이터

첫째을 사용하여 SPA에 대한 단위 테스트를 설정하려고

를 사용하여 모듈을로드하지, 다음 시험은 카르마에서 잘 실행 :

/// <reference path="../../definitions/jasmine/jasmine.d.ts" /> 
/// <reference path="../../src/app/domain/core/Collections.ts"/> 

define(["app/domain/core/Collections"], (collections) => { 

    describe('LinkedList',() => { 

     it('should be able to store strings for lookup',() => { 
      var list = new collections.Collections.LinkedList<string>(); 

      list.add("item1"); 
      expect(list.first()).toBe("item1"); 
     }); 
    }); 
}); 

그러나 collectionsany이므로 형식 선언에 사용할 수 없으므로 테스트를 작성할 때 intellisense 및 기타 등을 놓치고 있습니다. 좋지 않다! 내가 더 타이프 라이터 친화적 인 형식으로 테스트를 다시 쓰려고하면

문제가 발생합니다 :

/// <reference path="../../definitions/jasmine/jasmine.d.ts" /> 
/// <reference path="../../src/app/domain/core/Collections.ts"/> 
import c = require("./../../src/app/domain/core/Collections"); 

describe('LinkedList',() => { 

    it('should be able to store strings for lookup',() => { 
     var list: c.Collections.LinkedList<string> = new c.Collections.LinkedList<string>(); 

     list.add("item1"); 
     expect(list.first()).toBe("item1"); 
    }); 
}); 

이 나는 ​​등 편리한 인텔리 내 타입 정보를 잘 얻을 컴파일하지만 지금 카르마가 발생합니다 오류.

There is no timestamp for /base/src/app/domain/core/Collections! 
Failed to load resource: the server responded with a status of 404 (Not Found) 
(http://localhost:9876/base/src/app/domain/core/Collections) 
Uncaught Error: Script error for: /base/src/app/domain/core/Collections 

내가 지금 여기를 거 그만 해요,하지만 도움이 될 경우 :

없이 다음과 같은 오류 메시지에 표시된의 .js 접미사를, 모듈 을로드하려고 밝혀 필자의 업보 설정 파일, 테스트 메인 등을 제공하게 된 것을 기쁘게 생각합니다. 그러나 제 희망은 누군가가 전에 정확한 문제를 겪었고 올바른 방향으로 나를 지적 할 수 있었을 것입니다.

내 타이프립트는 AMD 플래그로 컴파일됩니다.

답변

0

그것은의 .js 접미사없이 모듈을로드하려고 밝혀, 오류의 아마하지 실제 소스입니다

. 실제로는 /base/src/app/domain/core/Collections이 아니며 app/domain/core/Collections이 아닙니다 (수동 유형이 안전하지 않은 경우와 동일). 거기에 있으면 안되는 고시 base/src/.

+0

필자가 require-call을 사용하지 않으면 타이프 스크립트 컴파일러가 파일을 찾지 못합니다. 또한,/base/src/app/domain/core/Collections.js는 카르마 러너 서버에있는 파일의 실제 위치입니다. 즉, 브라우저에 입력하면 404 : http : // localhost : 9876/base/src/app/domain/core/Collections.js가 생성되지 않습니다. 그러면 require.js가 파일의 .js 접미사를 생략하게 만드는 이유는 무엇입니까? – havardhu

2

이것은 TypeScript 문제가 아닙니다. 같은 문제가 발생했습니다. karma "window. __karma__ .files"배열에는 .js 확장을 포함하여 테스트에 포함 된 모든 파일이 포함됩니다.

이제는 .js 확장자를 제공 할 때 JS가 작동하지 않습니다. 이 문제를 해결하기 위해 main-test.js 파일에서 모든 * Spec.js 파일을 필터링하여 "tests"라는 변수를 만든 다음 파일 이름에서 을 제거하여.js을 requireJS에서 필요로했습니다. 되려고. 당신이 공급 한

또한
console.log('===========================================') 
console.log('=================TEST FILES================') 


var tests = Object.keys(window.__karma__.files).filter(function (file) { 
    return /\Spec\.js$/.test(file); 
}).map(function (file) { 
    console.log(file); 
    return file.replace(/^\/base\/|\.js$/g, ''); 
}); 

console.log('===========================================') 
console.log('===========================================') 


require.config({ 
    baseUrl:'/base', 
    paths: { 
     jquery  :["http://ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min", "lib/jquery"], 
     angular  : ["https://ajax.googleapis.com/ajax/libs/angularjs/1.3.0-beta.14/angular.min", "lib/angular"], 
     angularMocks: 'app/vendors/bower_components/angular-mocks/angular-mocks', 
    }, 
    shim: { 
     'angularMocks': { 
      deps: ['angular'], 
      exports: 'angular.mock' 
     } 
    }, 
    deps: tests, 
    callback: window.__karma__.start 
}); 

확인

메인 test.js : 여기에 더 많은 정보 : 우리는 (위의 링크에 제공된 정보를 기반으로) 그것을 어떻게 다음 http://karma-runner.github.io/0.8/plus/RequireJS.html

입니다 karma.config.js 파일에서 테스트 할 파일, 자세한 내용은 여기 http://karma-runner.github.io/0.8/plus/RequireJS.html 위의 링크와 동일합니다.

희망 하시겠습니까?

+0

+1 흥미로운 표정입니다. 감사합니다. 나는 오늘 밤 그것을 시험 할 것이다. – havardhu