ジャスミンを使用してカルマで実行する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);
});
});
プロジェクト構造を理解するためにplunkrでファイルを共有してもよろしいですか? – Sreekanth
あなたが参照したチュートリアルでは、モジュールを使用するようには見えませんが、あなたのコードにはインポートとエクスポートがあります。このように、私は追加のカルマプラグインを使用せずにこれがどのように答えるか分かりません。 – cartant
@sreekanth Plunkerでこれを実行する方法がわかりませんでした。なぜなら、npmとのやりとり方法がわからないからです。ごめんなさい。それが問題になっている場合は、https://github.com/jammerware/karma-questionの問題を示すgithub repoを作成しました。クローン作成、npmインストール、npmテスト。 – Jammer