在进行以太坊智能合约的开发过程中,我们需要经常进行合约的测试。而使用 @ethereum-waffle/mock-contract 这个库可以更加轻易地进行测试。该库可以模拟 Solidity 合约,从而可以快速地进行测试。
安装
使用 npm 进行安装:
npm install --save-dev @ethereum-waffle/mock-contract
使用说明
基本使用
在测试中创建一个 new MockContract() 实例之后,可以通过实例对象去模拟一个 Solidity 合约。
import { MockContract } from '@ethereum-waffle/mock-contract'; const mockMyContract = new MockContract();
你可以使用 mockMyContract.instance 来获取 mock 合约的实例。
模拟函数
使用该库后,你可以通过下面的代码给合约添加一个函数:
mockMyContract.mock.functionSelector('myFunction', [1, 2, 3], [4, 5, 6]).returns(42);
在上述代码中,我们 mock 实现了 myFunction 函数,该函数接受 3 个参数,每个参数的类型是 uint256。同时,当这个函数被调用时,它会返回 42。
提供 Solidity 编译器的 ABI
为了让该库知道如何模拟合约的函数,你需要提供 Solidity 编译器生成的 ABI(Application Binary Interface)。例如:
-- -------------------- ---- ------- - ------ - - --------- - - ------- --------- ------- --------- - -- ------------------ ------------- ------- ------------- -- - --------- --- ------- ----------- ---------- - - ------- --- ------- --------- - -- ------------------ ------- ------- ---------- -- - --------- - - ------- --------- ------- --------- - -- ------- -------------- ---------- --- ------------------ ------------- ------- ---------- - -- ----------- ------------------- ------------------- ------------------ -
可以使用 mock.ContractABI(ABI)
来载入合约的 ABI。
import { MockContract } from '@ethereum-waffle/mock-contract'; const mockMyContract = new MockContract(); const abi = require('./path/to/abi.json'); mockContract.abi = abi;
示例代码
-- -------------------- ---- ------- ------ - ------------ - ---- --------------------------------- ---------------------- -- -- - ----- -------------- - --- --------------- ---------------- -- -- - ----- ------- - ----- -------------------- ------------------ - -------------------------------------------------------------------- ----- ------------------------------------- --- ----------- -------- ---------- ----- -- -- - ----------------------------------------- ----- ------ - ----- ----------------------------------- --------------------------------------- --- ---
结论
你可以使用 @ethereum-waffle/mock-contract 这个库来更方便地进行智能合约的测试。它提供了对 Solidity ABI 的支持,可轻松地模拟 Solidity 合约在测试中的行为。希望这个教程对你有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/5eedac3bb5cbfe1ea0610993