Running Cadence Tests

[Previous << Dependency Manager](https://qiita.com/flowcadence/items/9195f9872874baab611e)
[Next >> Cadence Linter](https://qiita.com/flowcadence/items/25a7923f97d6138062a4)

https://qiita.com/flowcadence/items/3073d69c6e9895e68b5a#flow-cli-と-fcl


Flow CLIは、Cadenceテストを実行するためのわかりやすいコマンドを提供しており、開発者はスクリプトとスマートコントラクトを効果的に検証することができます。

プロジェクト内のすべてのテストを実行するには、次のようにします。
```ruby
flow test
```
`flow test`コマンドは、プロジェクト内の`_test.cdc`で終わるすべてのテストスクリプトを自動的に検出し、実行します。

> **注意**：`test`コマンドは、適切に初期化された設定を必要とします。もしあなたがFlowプロジェクトをまだセットアップしていない場合は、[flow init](https://qiita.com/flowcadence/items/df96ca5d6c335d25ea2f)ガイドを参照してください。
<h1>Prerequisites</h1>

テストを実行する前に、flow.jsonファイルでスマートコントラクトが適切に設定されていることを確認してください。必要なテスト用エイリアスも含みます。
<h3>Setting Up Testing Aliases in Contracts</h3>

もしあなたのテストがコントラクトのデプロイやコントラクトとのやり取りを含む場合は、`flow.json`設定ファイルの中の`contracts`セクションにコントラクトを追加する必要があります。特に、コントラクト名、ソースの場所、`testing`環境のためのアドレスのエイリアスを含む必要があります。

Example `flow.json` configuration:
```ruby
{
  "contracts": {
    "Counter": {
      "source": "cadence/contracts/Counter.cdc",
      "aliases": {
        "testing": "0x0000000000000007"
      }
    }
  },
  "networks": {
    /* ... your network configurations */
  },
  "accounts": {
    /* ... your account configurations */
  },
  "deployments": {
    /* ... your deployment configurations */
  }
}
```
`testing`エイリアスには、以下のアドレスのいずれかを使用できます。
* `0x0000000000000005`
* `0x0000000000000006`
* `0x0000000000000007`
* `0x0000000000000008`
* `0x0000000000000009`
* `0x000000000000000A`
* `0x000000000000000B`
* `0x000000000000000C`
* `0x000000000000000D`
* `0x000000000000000E`

> **Note**：コントラクトとエイリアスの設定に関する詳細は、[Flow CLI Configuration](https://qiita.com/flowcadence/items/df96ca5d6c335d25ea2f)のドキュメントを参照してください。

<h1>Example Usage</h1>

あなたのプロジェクトディレクトリに`test_script_test.cdc`というテストスクリプトがあるものとします。これは、テスト環境で実行されるCadenceスクリプトの機能を検証するものです。
```ruby:test_script_test.cdc
import Test

access(all) let blockchain = Test.newEmulatorBlockchain()

access(all) fun testSumOfTwo() {
    let scriptResult = blockchain.executeScript(
        "access(all) fun main(a: Int, b: Int): Int { return a + b }",
        [2, 3]
    )

    Test.expect(scriptResult, Test.beSucceeded())

    let sum = scriptResult.returnValue! as! Int
    Test.assertEqual(5, sum)
}
```
このスクリプトでは、単一のテストケース`testSumOfTwo`を定義し、2つの整数を足し合わせるCadenceスクリプト`(a + b)`が期待通りに動作するかどうかを確認します。結果が`5`という期待値と一致すれば、テストは合格です。

CLIを使用してあなたのプロジェクト内のすべてのテストを実行できます。
```ruby
$ flow test
```
Flow CLI は、`_test.cdc` で終わるすべてのテストスクリプトを検出し、それらを実行します。結果はターミナルに表示されます。
```ruby
Test results:
- PASS: test_script_test.cdc > testSumOfTwo
```
Cadenceでのテスト作成の詳細については、[Cadence Testing Framework](https://qiita.com/flowcadence/items/831eeb4521c4b645fb04)のドキュメントを参照してください。

***
<h3>Running Specific Tests</h3>

もしあなたがすべてのテストではなく特定のテストスクリプトを実行したい場合、テストファイルへのパスを指定することができます。
```ruby
flow test path/to/your/test_script_test.cdc
```
これは、指定したファイルに含まれるテストのみを実行します。

<h1>Flags</h1>

`flow test`コマンドは、テスト実行の管理とカバレッジレポートのための追加機能を提供する、いくつかのフラグをサポートしています。
<h3>Coverage Report</h3>

* Flag: `--cover`
* Default: `false`

`--cover` フラグは、テスト対象のコードのカバレッジを計算し、スクリプトやコントラクトのテストされていない部分を特定するのに役立ちます。
```ruby
$ flow test --cover
```
Sample output:
```ruby
Test results:
- PASS: test_script_test.cdc > testSumOfTwo
Coverage: 96.5% of statements
```

<h3>Coverage Report Output File</h3>

* Flag: `--coverprofile`
* Valid Inputs: A valid filename with extension `.json` or `.lcov`
* Default: `"coverage.json"`

`--coverprofile` フラグを使用して、カバレッジレポートの出力ファイルを指定します。

Example:
```ruby
$ flow test --cover --coverprofile="coverage.lcov"
```
生成されたカバレッジファイルは検査することができます。
```ruby
$ cat coverage.lcov
```

<h3>Coverage Code Type</h3>

* Flag: `--covercode`
* Valid Inputs: `"all"` (default) or `"contracts"`
* Default: `"all"`

`--covercode` フラグを使用すると、カバレッジレポートを特定のコードのタイプに限定することができます。この値を`"contracts"`に設定すると、スクリプトとトランザクションがカバレッジ分析から除外されます。
```ruby
$ flow test --cover --covercode="contracts"
```
コントラクトが存在しない場合の出力例：
```ruby
Test results:
- PASS: test_script_test.cdc > testSumOfTwo
There are no statements to cover
```
> **Note**：この例では、`--covercode` フラグが `"contracts"`に設定されているため、カバレッジレポートは空です。テストスクリプトはスクリプトのみを含んでおり、コントラクトが含まれていません。

<h3>Random Execution of Test Cases</h3>

* Flag: `--random`
* Default: `false`

`--random` フラグを使用すると、テストケースをランダムな順序で実行できます。これにより、テストの依存関係やテストの実行順序によって発生する可能性のある問題を特定しやすくなります。
```ruby
flow test --random
```

<h3>Seed for Random Execution</h3>

* Flag: `--seed`
* Default: `0`

`--seed`フラグを使用して、テストケースのランダムな実行順序のシード値を指定します。これにより、同じシード値を使用することで特定のランダムな順序を再現できるようになり、不安定なテストのデバッグに役立ちます。
```ruby
flow test --seed=12345
```
> **Note**：`--random` と `--seed` の両方が指定された場合、`--random`フラグは無視され、`--seed` のシード値がランダム化に使用されます。

<h3>Run Specific Test by Name</h3>

* Flag: `--name`
* Default: `""` (empty string)

`--name`フラグを使用すると、指定した名前に一致するテストのみを実行できます。これは、テストスクリプト内で特定のテスト関数を実行したい場合に便利です。
```ruby
flow test --name=testSumOfTwo
```
このコマンドは、`testSumOfTwo`という名前のテスト関数だけを、それを含むすべてのテストスクリプトで実行します。

あなたのCadenceスクリプトとスマートコントラクトの機能テストをさらに詳しく行うには、[Cadence Testing Framework](https://qiita.com/flowcadence/items/831eeb4521c4b645fb04)のドキュメントを参照してください。


*Last updated on **Dec 6, 2024** by **Alex Ni***

翻訳元

https://developers.flow.com/tools/flow-cli/tests

***
<b>[Previous << Dependency Manager](https://qiita.com/flowcadence/items/9195f9872874baab611e)
</b>

[Flow blockchain / Cadence version1.0ドキュメント](https://qiita.com/flowcadence/items/3073d69c6e9895e68b5a) (Running Cadence Tests)

<b>[Next >> Cadence Linter](https://qiita.com/flowcadence/items/25a7923f97d6138062a4)</b>