如何在使用 fabric-mock-stub 测试链码时模拟两个链码
How to mock two chaincodes while testing chaincode using fabric-mock-stub
我一直在做链码开发和测试。我已经成功测试了几个链代码的单个实例,但现在我遇到了一个问题。我的链代码之一调用其他链代码。我无法在测试环境中模拟两个链代码。
到目前为止,我已经浏览了@theledger/fabric-mock-stub 的文档,但无济于事。我通过提出错误进行了尝试和成功,并得出了正确的结论。
“错误:找不到链码 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_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。
我一直在做链码开发和测试。我已经成功测试了几个链代码的单个实例,但现在我遇到了一个问题。我的链代码之一调用其他链代码。我无法在测试环境中模拟两个链代码。
到目前为止,我已经浏览了@theledger/fabric-mock-stub 的文档,但无济于事。我通过提出错误进行了尝试和成功,并得出了正确的结论。 “错误:找不到链码 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_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。