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 {
...
}
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を使用してテストを実行する必要があります。
これを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コード。
私は次のことをしました。
タイピングのインストール
npm install typings --global
次に、ジャスミンの入力を追加します
typings install dt~jasmine --save --global
これをジャスミン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モジュールを使用しない最初の方法を好みます。 (まだモジュールをテストしていません)
インポートに問題がある場合は、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';
何らかの理由でこれが適切に回答されたことはありません。もちろん状況は変わりましたが、ここには現代的な答えはありません。
この問題に直面した場合は、@typings/jasmine
をdevDependencyとしてインストールし、tsConfigにインクルードのタイプが含まれていることを確認してください。
"include": ["typings/**/*.d.ts"]