2016-10-19 9 views
2

ジャスミンを使用してカルマで実行するTypescriptで単体テストを作成しようとしています。私はthis tutorialを読んで、thisのSOを質問しましたが、私の問題は持続しています。Typescript /カルマ:テスト実行中にカルマにCommonJSを利用可能にする

Typescriptコンパイラが自分のtypescriptをjavascriptにコンパイルするとき、require構文を使用して他のファイルから定義をインポートします。私は私のコンパイルのテストを実行すると、私はこの1つのようなエラーが出る:このことから

Uncaught ReferenceError: require is not defined at calculator.spec.js

を、私はrequire構文を定義し、何も私の実行時に利用できないことを理論化しています仕様。しかし、私が明らかにしていないことは、私がそれについて何をすべきかということです。 1つのSOの質問では、karma-browserifyの使用を提案しましたが、私は上のチュートリアルでそれがなくても動作することに気づきました。誰でも助けてくれれば幸いです。ここで

が私のファイルです:

package.json

{ 
    "name": "karma-stuff", 
    "version": "0.1.0", 
    "description": "A thing that helps me test stuff", 
    "main": "index.js", 
    "scripts": { 
    "test": "karma start" 
    }, 
    "keywords": [ 
    "help" 
    ], 
    "author": "me", 
    "license": "MIT", 
    "devDependencies": { 
    "jasmine": "^2.5.2", 
    "karma": "^1.3.0", 
    "karma-chrome-launcher": "^2.0.0", 
    "karma-jasmine": "^1.0.2", 
    "karma-typescript-preprocessor": "^0.3.0", 
    "tsc": "^1.20150623.0" 
    } 
} 

tsconfig.json

{ 
    "compilerOptions": { 
    "target": "es5", 
    "module": "commonjs", 
    "moduleResolution": "node", 
    "sourceMap": true, 
    "emitDecoratorMetadata": true, 
    "experimentalDecorators": true, 
    "removeComments": false, 
    "noImplicitAny": false 
    } 
} 

typings.json

{ 
    "globalDependencies": { 
    "core-js": "registry:dt/core-js#0.0.0+20160725163759", 
    "jasmine": "registry:dt/jasmine#2.5.0+20161003201800", 
    "node": "registry:dt/node#6.0.0+20160909174046" 
    } 
} 

karma.conf.js

module.exports = function(config) { 
    config.set({ 
    basePath: '', 
    frameworks: ['jasmine'], 
    files: [ 
     '*.spec.ts' 
    ], 
    preprocessors: { 
     '**/*.ts': ['typescript'] 
    }, 

    typescriptPreprocessor: { 
     options: { 
     sourceMap: true, // generate source maps 
     noResolve: false // enforce type resolution 
     }, 
     transformPath: function(path) { 
     return path.replace(/\.ts$/, '.js'); 
     } 
    }, 
    reporters: ['progress'], 
    port: 9876, 
    colors: true, 
    logLevel: config.LOG_INFO, 
    autoWatch: true, 
    browsers: ['Chrome'], 
    singleRun: false, 
    concurrency: Infinity 
    }) 
} 

検査対象物:calculator.service.ts

export class Calculator { 
    add(a: number, b: number): number { 
    return a + b; 
    } 
} 

テスト自体:calculator.spec.ts

import { Calculator } from './calculator.service'; 

describe("A calculator", function() { 
    it("adds integers correctly", function() { 
    let things = new Calculator(); 
    expect(things.add(1, 2)).toBe(3); 
    }); 
}); 
+1

プロジェクト構造を理解するためにplunkrでファイルを共有してもよろしいですか? – Sreekanth

+1

あなたが参照したチュートリアルでは、モジュールを使用するようには見えませんが、あなたのコードにはインポートとエクスポートがあります。このように、私は追加のカルマプラグインを使用せずにこれがどのように答えるか分かりません。 – cartant

+0

@sreekanth Plunkerでこれを実行する方法がわかりませんでした。なぜなら、npmとのやりとり方法がわからないからです。ごめんなさい。それが問題になっている場合は、https://github.com/jammerware/karma-questionの問題を示すgithub repoを作成しました。クローン作成、npmインストール、npmテスト。 – Jammer

答えて

1

問題は、あなたがECMAScript 5を使用していることが原因であると思われます。これは、トランスバータがrequirejsを使用するようにします。このターゲットes6を修正し、モジュールをes6に設定するか、npmパッケージ "requirejs"と "karma-requirejs"を追加します。

関連する問題