allure に説明を追加する

# はじめに
testcafeをつかったテスト結果の出力に allureを使うことにしたのは、見た目が美しく、見やすそうだったから。
公式ではないけれど、　reporterプラグインもあるので、導入もハードルは低そう。
実行結果の見やすさは大切。

公式　[testcafe](https://devexpress.github.io/testcafe/)
レポータープラグイン[testcafe-reporter-allure](https://www.npmjs.com/package/testcafe-reporter-allure)

## で
サンプル的なスクリプトを流して、詳細の出力結果を確認

![SnapCrab_NoName_2020-3-2_19-7-37_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51335/e8cd24f5-a760-c4d5-8496-9f8e87df7fc3.png)

なるほど。綺麗に出力される！

なるほど.

なるほど.

なんだけど、それぞれのテストケースを説明がほしい・・・
スクリプトを見ないとわからないのはちょっとよくない。
これ表示できないの？というところからスタート。

## まず
そもそもオプションで出力されたりしないものだろうか？？みんないると思うのだが・・
npmの説明を見る。
https://www.npmjs.com/package/testcafe-reporter-allure

doc-allure-config.js に何やら並んでいるが　「説明」に相当するものがない。
字面だけ追うと、JIRAとかあるのでそっちで説明しているのか？でも自分の環境ではJIRAは使っていない。
allure自体は出力してないのか？

allureのドキュメントを見てみる
https://docs.qameta.io/allure/


出てる！「Description」
https://docs.qameta.io/allure/#_test_case_page

##と、いうことは
testcafeのテスト結果に　Description　が出せれば、レポートに出力されるということ。
実行結果からレポート出力まではこんな流れでつながっている。

testcafe  →　reporter  →　allure

で、testcafeのレポートは　実行時に　どの形式で出力するかを指定する（デフォルトは　spec形式）。allure の場合　
```
$ testcafe -r allure  テストスクリプト名
```

となる。テストスクリプトから情報を取得するには　先ほどの　 doc-allure-config.js　を参考にすると META情報が使えそう。
レポーターはメタ情報をどのように取得しているのか？？？、

##どうなってる？
レポーターの本体を　ディレクトリに当たりをつけて探してみる。
どうやらこれらしい。
　node_module/testcafe-reporter-allure/lib/index.js　

META情報として　「SEVERITY」を取得していたので、検索してみると

      allure.severity(meta[allure.docAllureConfig.META.SEVERITY]);

と、それっぽいのがある。このメソッドを持つオブジェクトは
```
var Allure = require('allure-js-commons');
```

とあるところから、　allure-js-commons.js に定義されているっぽいのでこれを見てみる。

    setDescription(description: string, timestamp?: number): void;

あ、あるっぽい。これを呼び出せば、出力してくれるのではないだろうか・・
META情報の取得は「SEVERITY」をまねて。

      var DESCRIPTION = meta && meta[allure.docAllureConfig.META.DESCRIPTION];
      if (DESCRIPTION) {
        allureReporter.setDescription(DESCRIPTION);
      }

ん？「allure.docAllureConfig.META.DESCRIPTION」これはなに？
これは、上の方で定義してあった。

```
 try {
  reporterConfig = require(appRoot.path + '/doc-allure-config');
 } catch (err) {
   reporterConfig = {};
 }
```
レポーターのディレクトリにある　generateConfig.js　に　META情報の識別のための設定があるので

```
'use strict';

Object.defineProperty(exports, '__esModule', {
    value: true
});
var generateConfig = function generateConfig(reporterConfig) {
    var config = {
        CLEAN_REPORT_DIR: reporterConfig.CLEAN_REPORT_DIR || false,
        COPY_HISTORY: reporterConfig.COPY_HISTORY || false,
        RESULT_DIR: reporterConfig.RESULT_DIR || '/allure/allure-results',
        REPORT_DIR: reporterConfig.REPORT_DIR || '/allure/allure-report',
        META: {
            STORY_ID: reporterConfig.META && reporterConfig.META.STORY_ID || 'STORY',
            TEST_ID: reporterConfig.META && reporterConfig.META.TEST_ID || 'ID',
            SEVERITY: reporterConfig.META && reporterConfig.META.SEVERITY || 'SEVERITY',
            TEST_RUN: reporterConfig.META && reporterConfig.META.TEST_RUN || 'TEST_RUN'
        },
```
ここに追加。

```
'use strict';

Object.defineProperty(exports, '__esModule', {
    value: true
});
var generateConfig = function generateConfig(reporterConfig) {
    var config = {
        CLEAN_REPORT_DIR: reporterConfig.CLEAN_REPORT_DIR || false,
        COPY_HISTORY: reporterConfig.COPY_HISTORY || false,
        RESULT_DIR: reporterConfig.RESULT_DIR || '/allure/allure-results',
        REPORT_DIR: reporterConfig.REPORT_DIR || '/allure/allure-report',
        META: {
            STORY_ID: reporterConfig.META && reporterConfig.META.STORY_ID || 'STORY',
            TEST_ID: reporterConfig.META && reporterConfig.META.TEST_ID || 'ID',
            SEVERITY: reporterConfig.META && reporterConfig.META.SEVERITY || 'SEVERITY',
            DESCRIPTION: reporterConfig.META && reporterConfig.META.DESCRIPTION || 'DESCRIPTION',
            TEST_RUN: reporterConfig.META && reporterConfig.META.TEST_RUN || 'TEST_RUN'
        },
```

これで情報がつながるので、後はテストスクリプトにメタ情報を定義。

```
test  .meta({
  DESCRIPTION:'ここに説明としてテスト内容を具体的に記載する'
}) ('接続準備', async t => {});
```

##確認
コマンドラインから　レポート作成を実行すると・・・
![SnapCrab_NoName_2020-3-2_19-22-47_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51335/add4b905-18ae-5b11-17f5-8ea27da3845b.png)



##最後に
ここまでやったが実は　レポータープラグインにはもう一つあって
ドキュメントにはVideoが必要だったので手を入れたって書いてありますね。
こちらのかたもやはり Descriptionが必要と思ったのか追加されています。（もっと早くに気がつけばよかった・・・）

[testcafe-reporter-allure-expanded](https://www.npmjs.com/package/testcafe-reporter-allure-expanded)