簡體   English   中英

RequireJS沒有使用karma和typescript正確加載模塊

[英]RequireJS not loading modules properly using karma and typescript

我正在嘗試使用karma / jasmine設置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");
        });
    });
}); 

但是, collections的類型是any所以我不能將它用於類型聲明,因此我在編寫測試時缺少intellisense等等。 不好!

當我嘗試將測試重新編寫為更友好的TypeScript格式時出現問題:

/// <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");
    });
});

編譯得很好,我得到了我的類型信息,方便intellisense等,但現在karma拋出一個錯誤。

事實證明它正在嘗試加載沒有 .js后綴的模塊,由以下錯誤消息指示:

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

我現在要停在這里,但是如果有幫助我很樂意提供我的業力配置文件,test-main等等。 但我希望有人之前遇到過這個問題,並且可能能夠指出我正確的方向。

我的打字稿用AMD標志編譯。

它不是TypeScript問題。 我們遇到了同樣的問題。 事實證明,業力“window 。__ karma__ .files”數組包括測試中包含的所有文件,包括.js擴展。

現在,在提供.js擴展名時,requireJS不起作用。 要修復它,在我們的main-test.js文件中,我們通過過濾所有* Spec.js文件創建了一個變量“tests”,然后我們從文件名中刪除.js ,因為requireJS需要它。 更多信息請訪問: http//karma-runner.github.io/0.8/plus/RequireJS.html

以下是我們如何做到的(基於上面鏈接中提供的信息):

主test.js

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
});

另外請確保您已在karma.config.js文件中提供了要測試的文件,更多詳細信息請參見: http ://karma-runner.github.io/0.8/plus/RequireJS.html與上面的鏈接相同。

希望能幫助到你

事實證明它試圖在沒有.js后綴的情況下加載模塊,

這可能不是錯誤的實際來源。 實際上它正在查看/base/src/app/domain/core/Collections而不是app/domain/core/Collections (如手動類型不安全的方式)。 注意base/src/不應該在那里。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM