Solidity

Truffle/Solidity 中的 assert()/require() 單元測試

  • April 14, 2022

如果我這樣寫一個函式:

function calculate(int x) public returns (int) {
   require(x > 0);
   // Do other stuff
   return x;
}

當我嘗試使用參數 -1 呼叫函式時,如何在 Truffle 中編寫JavaScript 單元測試來驗證 require 是否失敗?

顯然,這只是一個說明性範例。我似乎無法在網上找到任何文件。

it("should never be zero", function () {
   return ContractName.deployed().then(function(instance) {
       return instance.calculate.call(0);
   }).then(function (result) {
       // What do I put here?
   });
})
require('chai')
.use(require('chai-as-promised'))
.should();
const ERROR_MSG = 'VM Exception while processing transaction: revert';
ContractName = await ContractName.new();
it('should never be zero', async() => {
  await ContractName
  .calculate(-1)
  .should.be.rejectedWith(ERROR_MSG);
})

您使用 TestRPC 或 Geth 進行測試嗎?它們的行為可能不同,對於我應該失敗的單元測試,我遵循以下說明:

當 TestRPC 和 Geth 拋出時,它們的行為方式不同。這個要點是一個關於如何覆蓋這種情況的例子。 https://gist.github.com/xavierlepretre/d5583222fde52ddfbc58b7cfa0d2d0a9

引用自:https://ethereum.stackexchange.com/questions/32165