Web3 DevOps 的编译和测试

98 阅读4分钟

Web3 DevOps:第1部分:编译和测试

为Ethereum区块链建立DevOps管道

在这个系列的前一篇文章《Web3 DevOps:系列》中,我解释了这个系列背后的动机。在这篇文章中,我们通过为我们的应用程序搭建脚手架以及学习如何编译和测试它来开始。

为了开始,我们需要一个项目。在这个例子中,我将使用Truffle来构建我的分布式应用(dApp)。

truffle unbox react myapp

这个命令创建了一个具有React前端和用Solidity编写的合同的项目。我用JavaScript写了我的测试,所以我删除了测试文件夹中的TestSimpleStorage.sol文件。我还使用了NPM而不是Yarn,所以我删除了客户端 文件夹中的yarn.lock文件。项目清理完毕后,我用git初始化并提交了我的代码。

git initgit branch -m maingit add -–allgit commit -a -m “init

我为这篇文章创建了一个名为 "blog/part1"的新分支。

git checkout -b blog/part1

在我走得太远之前,我想确定如何使用Truffle在本地编译、测试和部署代码。我将在最后的管道中重复这些命令。

契约

编译

为了编译合同,我运行了以下命令。

truffle compile

这在client/src 文件夹下创建了一个新的合同 文件夹。

在client/src文件夹下的新合同文件夹

因为我将在我的管道中编译这些文件,我把它们添加到客户项目的*.gitignore*文件中。在我的.gitignore的底部,我添加了以下内容。

对.gitignore的修改

一旦我知道如何编译这些合同,我就需要对它们进行测试。

测试

我用以下命令对我的智能合约进行了测试。

truffle test

测试运行并成功了,但我注意到没有结果文件。为了在我的管道中显示结果,测试结果必须在一个可以在管道中发布的文件中。用Truffle运行的JavaScript测试使用Mocha。我可以通过更新我项目根部的truffle-config.js 文件来配置Mocha以创建一个结果文件。在网络部分的下面,我添加了这块代码。

truffle-config.js的Mocha部分

现在运行truffle测试命令,在项目的根部创建了一个TEST-results.xml 文件。这将被用来在我的管道中发布结果。这个文件不应该被git跟踪,所以我在项目的根部添加了一个*.gitignore*文件,并在该文件中添加了TEST-results.xml

将TEST-results.xml添加到.gitignore中

前端

构建

随着合同的编译和测试,我开始构建和测试前端。切换到客户 目录,运行下面的命令建立前端。

npm run build

测试

随着前端的建立,我运行了测试。

npm test

试图运行测试时,我很快意识到我有一个问题。前端使用Jest来运行测试,它提示我需要输入。

Jest提示输入

这在自动化管道中是行不通的。经过一些研究,我发现我可以通过设置一个环境变量来运行测试,从而让Jest知道它正在CI中运行。

CI=true npm test

这很有效,但现在我又回到了之前的问题。我需要一个包含测试结果的文件。获得一个与我的管道兼容的结果文件需要jest-junit包。我使用npm安装了它,并将其保存为开发依赖项。

npm install --save-dev jest-junit

安装了这个包后,我需要在我的npm测试命令中添加一些参数来生成文件。

CI=true npm test -- --reporters=default --reporters=jest-junit

这就生成了一个junit.xml 文件。这个文件不应该被追踪,所以在client 文件夹中的.gitignore文件的底部,我添加了以下内容。

在完成了所有的编译和测试后,我提交了所有的修改。

git commit -a -m "compile and test"

然后我把我的修改合并到main

git checkout maingit merge blog/part1

接下来要做的事情是部署我的智能合约。我将在下一篇文章中介绍这个问题,因为这正是事情变得非常棘手的地方。