Solidity
Truffle/Solidity 中的 assert()/require() 單元測試
如果我這樣寫一個函式:
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