以太坊Solidity程式語言開發框架————8、測試合約

FLy_鵬程萬里發表於2018-07-13

框架

Truffle使用Mocha測試框架來做自動化測試,使用Chai來做斷言。這兩個庫的結合可能讓人耳目一新,我們基於這兩者之上,提供一種方式來編譯簡單和可管理的合約自動化測試用例。

位置

測試檔案應置於./tests目錄。Truffle只會執行以.js.es.es6.jsx結尾的測試檔案,其它的都會被忽略。

測試用例

每個測試檔案至少應該包含至少一個對Mocha的describe()函式的呼叫,詳情見Mochajs Documentation。另一種方式是使用Truffle自定義的contract()函式,作用型別describe()函式,但額外新增了一些特性:

  • 在每一個contract()函式執行前,你的合約都會重部署到以太坊客戶端中,這樣測試用例會在一個乾淨狀態下執行。
  • contract()函式支援傳入多個可用的帳戶做為第二個引數傳入,你可以用此來進行測試。

當你需要與你寫的合約進行互動時,使用contract(),否則使用describe()函式。

測試用例示例

truffle init命令為我們提供了一個簡單的測試用例例子。它會先部署你的合約,然後執行在it()塊中指定的測試用例。

contract('MetaCoin', function(accounts) {
  it("should put 10000 MetaCoin in the first account", function() {
    // Get a reference to the deployed MetaCoin contract, as a JS object.
    var meta = MetaCoin.deployed();

    // Get the MetaCoin balance of the first account and assert that it's 10000.
    return meta.getBalance.call(accounts[0]).then(function(balance) {
      assert.equal(balance.valueOf(), 10000, "10000 wasn't in the first account");
    });
  });
});

需要注意的是在contract()函式的傳入的MetaCoin僅僅因為用來展示,說明它是MetaCoin相關的測試,並無本質作用。

合約

Truffle提供了介面抽象,方便你與合約進行便捷互動。通過var meta = MetaCoin.deployed()這行。Truffle設法保證了,你可以在測試用例,前端,移植(Migration)中都能用這種方式與你自己寫的合約進行互動。可以在7. 合約互動章節瞭解更多。

命令

要執行測試,執行下面的命令:

truffle test

你也可以對單個檔案執行測試:

truffle test ./path/to/test/file.js

注意事項

EthereumJS TestRPC在進行自動化測試時相比其它客戶端會快非常多。而且,TestRPC包含了一些,Truffle可以用來加速測試的特性。作為一個能用流程,我們建議你在開發和測試環節使用TestRPC。當你籌備好要釋出到現上時,才使用Geth或其它官方以太坊客戶端來進行一次測試。

更多

Truffle提供了操作Mocha的配置檔案的入口。參見1. 配置檔案章節來了解更多。

如果任何問題,歡迎留言批評指正。

相關文章