web-dev-qa-db-ja.com

タイプスクリプトでキュウリを適切に使用しますか?

tutorial をフォローしていましたが、セットアップが本当に悪いです。基本的に、TypeScriptを使用して.tsファイルを.jsに変換します。したがって、基本的には、ソースコード全体を.jsファイルで汚染します。

したがって、ソースコードから.tsファイルをインポートするとすぐに、すべての依存関係が.jsファイルで複製されます。

適切なTypeScriptキュウリテストを行う方法を知っていますか?

ハッキーな解決策:すべての機能とすべてのファイルを別の一時フォルダーにコピーし、そこから実行します。きゅうりはこれより少し成熟していると思いますので、ここで質問しますか?

または、キュウリの構成を変更して、tsからビルドフォルダーを検索します。

ありがとうございました

TypeScriptを使用するだけでは機能しない理由:

コード構造:

  • テスト
    • a.feature
    • stepDefinitions.ts

次に、TypeScriptをコンパイルして、次の構造にします。

  • テスト
    • a.feature
    • stepDefinitions.ts
  • ビルド
    • テスト
      • stepDefinitions.js

今、あなたはそれを見ることができますstepDefinitions.jsどこにあるのかわからないa.feature。ビルド/テストフォルダーでキュウリを実行すると、実行するステップ機能が見つかりません...まあ、それらはテストフォルダーにあるからです。したがって、それを修正するためのハッキーな方法は、この構造をもたらす機能ファイルをコピーすることです。

  • テスト
    • a.feature
    • stepDefinitions.ts
  • ビルド
    • テスト
      • a.feature
      • stepDefinitions.js

今では動作しますが、ハッキーです。私はそれが好きではありません。

6
Totty.js

提供された詳細情報に基づいて回答を更新:

最初にすべきことは、機能とステップを独自のフォルダーに分割することです

 tests
  features
    a.feature
    b.feature
  stepDefinitions
    aStep.ts

次に、キュウリのプロファイルとなるcucumber.jsファイルを作成します。私は次のプロファイルを使用しますが、あなたが何をしたいかはあなた次第です

    var common = [
  `--format ${
    process.env.CI || !process.stdout.isTTY ? 'progress' : 'progress-bar'
    }`,
  '--format json:./reports/cucumber-json-reports/report.json',
  '--format rerun:@rerun.txt',
  '--format usage:usage.txt',
  '--parallel 20',
  '--require ./build/tests/stepDefinitions/**/*.js',
  '--require ./build/tests/stepDefinitions/*.js',
  '--require ./build/tests/support/*.js'
].join(' ');

module.exports = {
  default: common,
};

上記はあなたのステップがどこにあるかをキュウリに伝えます。これで、プロジェクトのルートから次のようなものを実行できます

tsc && ./node_modules/.bin/cucumber-js ./tests/features/ -p default

この意志

  1. コードをコンパイルする
  2. Cucumber-jsライブラリを実行します
  3. Featuresフォルダーに対してcucumber-jsを実行します
  4. Cucumber.jsファイルに作成したデフォルトのプロファイルを使用してfeaturesフォルダーに対してcucumber-jsを実行します
4
Raymond Kelly

キュウリのテストをsrcに入れて、tscでコンパイルすることは、ソフトウェアの実行に必要のないbuildディレクトリを汚染するため、あまり良い方法ではありません。

代わりに、ts-nodeを使用できます。 npm install ts-node --save-devを実行します。 cucumber-js構成ファイルの例を次に示します(すべての.featureおよびステップ定義ファイルは私のセットアップの/featuresフォルダーにあります):

module.exports = {
  default: [
    '--require-module ts-node/register',
    '--require ./features/**/*.ts',
    '--require ./features/*.ts',
  ].join(' '),
};
2
bpalij

Raymond Kellyが提案したように、tscを使用してコードをコンパイルしてから、コンパイルされたファイルに対してcucumberを実行する必要はありません。 --require-module ts-node/registerを使用して、TypeScriptトランスパイラーでキュウリを実行できます。 cucumber-ts-starter のhdorgevalの好意による完全な例

2
joniba

私はあなたの質問に従わないのですか? Cucumberは、.tsファイルを.jsファイルにコンパイルすることとは何の関係もありません。つまり、TypeScriptがそれを実行します。 .tsファイルと.jsファイルを同じフォルダーに入れたくない場合は、tsconfig.jsonファイルに以下を追加できます。

"outDir": "TypeScript"

これにより、プロジェクトのルートにあるフォルダ「TypeScript」にJavaScriptファイルが出力されます。デバッグが簡単になるので、個人的には一緒に保管するのが好きです。 javascriptを実行するときに使用される.jsファイルであるため、作成中の.jsファイルから逃れる方法はありません。

0
Raymond Kelly