test

不写自动测试用例的程序员不是一个好的测试工程师。我们鼓励所有的项目在启动最初,就建立完整的自动化测试用例。随着项目的发展,前期的投入会得到数百倍的回报。

阅读完本章你可以学会 FIBOS 的测试用例的编写。

  • 本文运行环境:

系统:macOS

  • 本章涉及到文章列表:

    fibos_client/
    ├── call.js
    ├── deploy.js
    ├── hello
    │   ├── hello.abi
    │   └── hello.js
    ├── initClient.js
    └── test
      ├── case.js
      ├── sample_test.js
      └── test_contract.js

    本章示例代码地址:https://github.com/FIBOSIO/samples

一个简单的测试用例

创建测试用例文件夹:

mkdir test
cd test

以下代码保存至工作目录 sample_test.js:

var test = require('test');
test.setup();

describe('a sample case', () => {
    var name;

    before(() => {
        name = "FIBOS";
    });

    it('check name', () => {
        assert.equal(name, "FIBOS");
    });
});

test.run();

执行:

fibos sample_test.js

输出结果:

    a sample case
    √ check name

  √ 1 tests completed (0ms)

开始编写 FIBOS 业务场景测试用例

依然,以下代码保证本地的 FIBOS 节点服务正在运行。

写一个新建 FIBOS 账户的测试用例

以下代码保存至工作目录 case.js:

var test = require('test');
test.setup();

var FIBOS = require('fibos.js')
var config = {
    "chainId": "cf057bbfb72640471fd910bcb67639c22df9f92470936cddc1ade0e2f2e7dc4f",
    "producer-name": "eosio",
    "public-key": "FO6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV",
    "private-key": "5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3",
    "httpEndpoint": "http://127.0.0.1:8888",
};


describe('new account FIBOS', () => {
    var fibos;

    before(() => {
        fibos = FIBOS({
            chainId: config["chainId"],
            keyProvider: config["private-key"],
            httpEndpoint: config["httpEndpoint"],
            logger: {
                log: null,
                error: null
            }
        });
    });

    it('new account', () => {
        fibos.newaccountSync({
            creator: 'eosio',
            name: "hellofibos",
            owner: config["public-key"],
            active: config["public-key"]
        })
    });

    it("get account", () => {
        var c = fibos.getAccountSync('hellofibos');
        assert.equal(c.account_name, "hellofibos");
    });
});

require.main === module && test.run(console.DEBUG);

输出结果:

 new account FIBOS
    √ new account
    √ get account

  √ 2 tests completed (13ms)

写一个合约的测试用例

还记得我们之间的那个 JavaScript 合约吗,接下来我们针对 hello 的合约编写测试用例:

以下代码保存至工作目录 test_contract.js:

var test = require('test');
test.setup();

var FIBOS = require('fibos.js')
var contractName = "hello";
var fs = require("fs");
var config = {
    "chainId": "cf057bbfb72640471fd910bcb67639c22df9f92470936cddc1ade0e2f2e7dc4f",
    "producer-name": "eosio",
    "public-key": "FO6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV",
    "private-key": "5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3",
    "httpEndpoint": "http://127.0.0.1:8888",
};


describe('contract test', () => {
    var fibos;

    before(() => {
        fibos = FIBOS({
            chainId: config["chainId"],
            keyProvider: config["private-key"],
            httpEndpoint: config["httpEndpoint"],
            logger: {
                log: null,
                error: null
            }
        });
    });

    it('get code', () => {
        var code = fibos.getCodeSync(contractName, true);
        assert.notEqual(code.code_hash, "0000000000000000000000000000000000000000000000000000000000000000");
    });

    it('setabi', () => {
        var abi = JSON.parse(fs.readTextFile("../hello/hello.abi"));
        fibos.setabiSync(contractName, abi);
    });
});

require.main === module && test.run(console.DEBUG);

输出结果:

  contract test
    √ get code
    √ setabi (405ms)

  √ 2 tests completed (420ms)

Last updated