跳转至主要内容

Solidity 和 Truffle 持续集成设置

solidity智能合同测试truffleganache
中级
Markus Waas
soliditydeveloper.com(opens in a new tab)
2020年6月5日
6 分钟阅读 minute read

与 Truffle 的持续集成 (CI) 非常适合在实施一组基本测试后进行开发。 它允许您运行非常长的测试。在合并拉取请求(opens in a new tab)之前确保所有测试通过,并使用其他工具跟踪各种统计数据。

我们将使用 Truffle Metacoin Box(opens in a new tab) 来设置我们的持续集成。 您可以选择 Travis CI 或 Circle CI。

设置 Travis CI

添加 Travis CI(opens in a new tab) 很简单。 您只需要将 .travis.yml 配置文件添加到项目的根目录:

1language: node_js
2node_js:
3 - 10
4
5cache: npm
6
7before_script:
8 - echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
9
10script:
11 - npm test
显示全部

我们现在保持简单,只运行执行 Truffle 单元测试的测试脚本。 但我们有一个问题,在 Travis CI 机器上没有区块链。 一个简单的解决方法是使用命令 npm install ganache-cli 安装 ganache-cli,并在测试前运行它。 您可以通过在 npx truffle test 调用前添加一个带有 npx ganache-cli > /dev/null 行的 bash 脚本来实现这一点。 完整示例 bash 脚本(opens in a new tab)

设置 Circle CI

CircleCi(opens in a new tab) 需要更长的配置文件。 额外的 npm ci(opens in a new tab) 命令在 Travis 中自动完成。 它安装依赖项比 npm install 更快和更安全。 在测试之前,我们再次使用 Travis 版本中的同一个脚本来运行 ganache-cli。

1version: 2
2
3aliases:
4 - &defaults
5 docker:
6 - image: circleci/node:10
7
8 - &cache_key_node_modules
9 key: v1-node_modules-{{ checksum "package-lock.json" }}
10
11jobs:
12 dependencies:
13 <<: *defaults
14 steps:
15 - checkout
16 - restore_cache:
17 <<: *cache_key_node_modules
18 - run:
19 name: Install npm dependencies
20 command: |
21 if [ ! -d node_modules ]; then
22 npm ci
23 fi
24 - persist_to_workspace:
25 root: .
26 paths:
27 - node_modules
28 - build
29 - save_cache:
30 paths:
31 - node_modules
32 <<: *cache_key_node_modules
33
34 test:
35 <<: *defaults
36 steps:
37 - checkout
38 - attach_workspace:
39 at: .
40 - run:
41 name: Unit tests
42 command: npm test
43
44workflows:
45 version: 2
46 everything:
47 jobs:
48 - dependencies
49 - test:
50 requires:
51 - dependencies
显示全部

添加 eth-gas-reporter 插件

Eth-gas-reporter 插件对于记录您的智能合约函数的 gas 成本相当有用。 在您的 CI 中使用它,将进一步有助于在添加拉取请求时显示差异。

第 1 步:安装 eth-gas-reporter 插件和

npm install --save-dev eth-gas-reporter
npm install --save-dev @codechecks/client

第 2 步:在您的 truffle-config.js 内的 mocha 设置中加入该插件

查看选项(opens in a new tab)

1module.exports = {
2 networks: { ... },
3 mocha: {
4 reporter: 'eth-gas-reporter',
5 reporterOptions: {
6 excludeContracts: ['Migrations']
7 }
8 }
9};
显示全部
复制

第 3 步:在您的项目的根目录中添加一个 codechecks.yml

1checks:
2 - name: eth-gas-reporter/codechecks

第 4 步:在 test 命令后运行 codechecks

- npm test
- npx codechecks

第 5 步:创建一个 Codechecks 帐户

这就完成了。 现在,您将看到一份关于您的拉取请求的 gas 成本变化的报告。

Gas 成本报告示例

添加 solidity-coverage 插件

通过 solidity-coverage 插件,您可以检查您的代码路径有多少被您的测试所覆盖。 将此插件添加到您的 CI,设置好后,使用非常方便。

第 1 步:创建一个 metacoin 项目并安装覆盖工具

npm install --save-dev truffle coveralls solidity-coverage

第 2 步:将 solidity-coverage 添加到 truffle-config.js 的插件数组中。

1module.exports = {
2 networks: {...},
3 plugins: ["solidity-coverage"]
4}
复制

第 3 步:将 coverage 命令添加到 .travis.yml 或 Circle CI config.yml

- npx truffle run coverage
- cat coverage/lcov.info | npx coveralls

Solidity coverage 启动了它自己的 ganache-cli,所以我们不必担心这个问题。 但不要替换常规测试命令,coverage 的 ganache-cli 工作方式不同,因此不能代替运行正常的单位测试。

第 4 步:将 repository 添加到 Coveralls

Coverall 示例

进一步的想法

这是全部内容了。 持续集成是您开发中非常有用的战略。 您可以在 Truffle-CI-example(opens in a new tab) 查看完整的示例。 请务必移除 Circle-CI 或 Travis,只使用一个就够了!

上次修改时间: @tyevlag(opens in a new tab), 2023年8月15日

本教程对你有帮助吗?