如何使用Fabric-mock-stub

时间:2019-04-05 04:38:58

标签: hyperledger-fabric hyperledger-chaincode

我一直在从事链码开发和测试。我已经成功测试了Chaincode的多个单个实例,但是现在我陷入了一个问题。我的一个链码称为其他链码。我无法在测试环境中模拟两个链码。

到目前为止,我已经阅读了@ theledger / fabric-mock-stub的文档,但无济于事。我通过提出错误来尝试试验和成功,并得出了正确的结论。 “错误:找不到Chaincode bank_contract / primarychannel。请使用mockPeerChaincode创建它。”

按以下步骤解决此错误后:

let Chaincode = require("./transaction-contract.js");
let BankChaincode = require("../bank/bank-contract");
let fms = require("@theledger/fabric-mock-stub");
let chai = require("chai");
let expect = require("chai").expect;
let should = require("chai").should();
let globalTemp = "";
let globalTempAdmin = "";

let ChaincodeMockStub = fms.ChaincodeMockStub; 
const chaincode = new Chaincode();
const bankChaincode = new BankChaincode();
const mockStub = new ChaincodeMockStub("transaction_chaincode", 
 chaincode);
const bankMockStub = new ChaincodeMockStub("bank_contract", 
 bankChaincode);
mockStub.mockPeerChaincode("bank_contract", bankMockStub);

在执行chaincode函数时,我仍然遇到相同的错误。

我的问题:

  1. 我做对了吗?我制作两个模拟存根,然后在另一个上注册的方式。
  2. 如何根据我的要求指定频道名称,这就是我的代码失败的地方

1 个答案:

答案 0 :(得分:0)

您必须创建并注册名称为<chaincode_name>/<channel_name>的第二个链码。您的情况应该是

    const bankMockStub = new ChaincodeMockStub("bank_contract/primarychannel", bankChaincode);
    mockStub.mockPeerChaincode("bank_contract/primarychannel", bankMockStub);

我不知道为什么,但这是ChaincodeMockStub.invokeChaincode的工作方式:

       if (channel != '') {
            chaincodeName = chaincodeName + '/' + channel;
        }

更多详细信息here