web-dev-qa-db-ja.com

JasmineとTypeScriptを使用した単体テスト

Jasmineを使用してTypeScriptで書かれた単体テストをコンパイルしようとしています。単体テストファイルに次の内容が含まれていると、Resharperはjasmine.d.tsから型をインポートするためのリンクを要求します。

/// <reference path="sut.ts" />
/// <reference path="../../../scripts/typings/jasmine/jasmine.d.ts" />

describe("Person FullName", function () {
    var person;

    BeforeEach(function () {
        person = new Person();
        person.setFirstName("Joe");
        person.setLastName("Smith");
    });

    It("should concatenate first and last names", function () {
        Expect(person.getFullName()).toBe("Joe, Smith");
    });
});

そのため、リンクをクリックして、次のようになります(実際には、reshaperはdescribe関数の前に「Jasmine。」を付けただけなので、手動で他のJasmine呼び出しに付けました)。

/// <reference path="sut.ts" />
/// <reference path="../../../scripts/typings/jasmine/jasmine.d.ts" />
import Jasmine = require("../../../Scripts/typings/jasmine/jasmine");

Jasmine.describe("Person FullName", function () {
    var person;

    Jasmine.BeforeEach(function () {
        person = new Person();
        person.setFirstName("Joe");
        person.setLastName("Smith");
    });

    Jasmine.It("should concatenate first and last names", function () {
        Jasmine.Expect(person.getFullName()).toBe("Joe, Smith");
    });
});

ただし、importステートメントには、「外部モジュール../../../scripts/typings/jasmine/jasmineを解決できません。モジュールを非モジュールタイプにエイリアスできません」というエラーメッセージが付いた赤い波線があります。

このエラーの原因は何ですか?プロジェクトのビルド設定で「モジュールシステム」オプションがAMDに設定されていることを確認しました。また、jasmineモジュールがjasmine.d.tsで定義されていることも確認しました。このファイルをDefinitelyTypedサイトからダウンロードしました。

declare module jasmine {
    ...
}
41
aw1975

2018年現在のts-nodeアプリをテストする最良の方法は次のとおりです(私の意見では):

npm install --save-dev jasmine @types/jasmine ts-node

package.json ::

{
  "scripts": {
    "test": "ts-node node_modules/jasmine/bin/jasmine"
  }
}

Specファイルで:

import "jasmine";
import something from "../src/something";

describe("something", () => {
    it("should work", () => {
        expect(something.works()).toBe(true);
    });
});

テストを実行するには:

npm test

これは、ローカルにインストールされたts-nodeおよびjasmineのバージョンを使用します。これは、ローカルバージョンでは、全員が同じバージョンを使用していることを確認できるため、グローバルにインストールされたバージョンを使用するよりも優れています。

注:ノードアプリの代わりにWebアプリがある場合、おそらくJasmine CLIの代わりにKarmaを使用してテストを実行する必要があります。

42
AJ Richardson

これをTypeScriptスペックファイルの先頭に配置します。

/// <reference path="../../node_modules/@types/jasmine/index.d.ts" />
let Jasmine = require('jasmine');

動作させるには、次のJasmineモジュールをインストールする必要があります。

$ npm install jasmine-core jasmine @types/jasmine jasmine-ts --save-dev

これを行うと、IDE(WebStormなど)はJasmineと、describe()、it()、expect()などの機能を認識します。したがって、接頭辞を付ける必要はありません。 "ジャスミン。"また、jasmine-tsモジュールを使用して、コマンドラインからspecファイルを実行できます。これらのコマンドラインツールをグローバルにインストールします。

$ npm install -g jasmine jasmine-ts

次に、「jasmine」コマンドラインモジュールを設定して、Jasmineが設定ファイルを見つけられるようにします。その後、jasmine-tsを実行できるようになり、コマンドラインからspecファイルが正常に実行されるはずです。

./node_modules/.bin/jasmine-ts src/something.spec.ts

..そして、IDEを同様に実行するように設定することができ、その方法でデバッグを実行することもできます(私にとってはうまくいきます)。

このようにテストを作成すると、サーバー側でKarmaを使用せずにJasmineテスト仕様を実行したり、Karmaを使用してWebブラウザーで実行したりできます。同じTypeScriptコード。

7
Yavin5

私は次のことをしました。

タイピングのインストール

npm install typings --global

次に、ジャスミンの入力を追加します

typings install dt~jasmine --save --global
5
Andrew Newland

これをジャスミンhtmlファイルに含めてください...

<script type="text/javascript" src="jasmine/lib/jasmine-2.0.0/jasmine.js"></script>

...またはnpm jasmineパッケージをインストールします。

npm install --save-dev jasmine

2番目の方法(モジュールとしてのジャスミン)を使用している場合、インポートする必要があります。

var jasmine = require('jasmine');

または

import jasmine from 'jasmine';

次に、他のコードを変更します。

jasmine.describe("Person FullName", function () {
    var person;

    jasmine.beforeEach(function () {
        person = new Person();
        person.setFirstName("Joe");
        person.setLastName("Smith");
    });

    jasmine.it("should concatenate first and last names", function () {
        jasmine.expect(person.getFullName()).toBe("Joe, Smith");
    });
});

個人的には、jasmine npmモジュールを使用しない最初の方法を好みます。 (まだモジュールをテストしていません)

3
marcel

インポートに問題がある場合は、tsconfig-pathsを使用してください

npm i ts-node tsconfig-paths types/jasmine jasmine --save-dev

TypeScript対応のジャスミンを実行します。

ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine.js

ジャスミンが.tsファイルを検索することを確認してください:

"spec_files": [
    "**/*[sS]pec.ts"
],
"helpers": [
    "helpers/**/*.ts"
],

スクリプトをテストするには、プロジェクトでポリフィルを使用する場合にポリフィルが必要になる場合があります。 helpers/global/polifill.tsなどの必要なインポートを含むヘルパーファイルを作成します

import 'core-js';
1

何らかの理由でこれが適切に回答されたことはありません。もちろん状況は変わりましたが、ここには現代的な答えはありません。

この問題に直面した場合は、@typings/jasmineをdevDependencyとしてインストールし、tsConfigにインクルードのタイプが含まれていることを確認してください。

  "include": ["typings/**/*.d.ts"]
0
Mathijs Segers