Hyperledger织物链码使用开玩笑模拟
我正在尝试使用开玩笑将单元测试添加到我的链代码。 From the sample repo
到目前为止,我一直在尝试:
const { ChaincodeStub } = require('fabric-shim');
const MyContract = require('./myContract');
describe('Asset Transfer Basic Tests', () => {
let transactionContext;
let mockChaincode;
let asset;
beforeEach(() => {
transactionContext = new Context();
mockChaincode = ChaincodeStub;
jest.mock('fabric-shim', () => ({
ChaincodeStub: jest.fn().mockImplementation(() => ({
deleteState: jest.fn().mockImplementation(async (key) => {
if (mockChaincode.states) {
delete mockChaincode.states[key];
}
return Promise.resolve(key);
}),
getState: jest.fn().mockImplementation(async (key) => {
let ret;
if (mockChaincode.states) {
ret = mockChaincode.states[key];
}
return Promise.resolve(ret);
}),
getStateByRange: jest.fn().mockImplementation(async () => {
function* internalGetStateByRange() {
if (mockChaincode.states) {
// Shallow copy
const copied = { ...mockChaincode.states };
for (const key in copied) {
yield { value: copied[key] };
}
}
}
return Promise.resolve(internalGetStateByRange());
}),
putState: jest.fn().mockImplementation((key, value) => {
if (!mockChaincode.states) {
mockChaincode.states = {};
}
mockChaincode.states[key] = value;
}),
})),
}));
transactionContext.setChaincodeStub(mockChaincode);
asset = {
birthDay: '1966-05-31T00:00:00.000Z',
firstName: 'Federico',
gender: 'male',
id: '09c2f565-9923-4b78-bd1c-ff635a70a880',
lastName: 'Villegas',
};
});
describe('Test InitLedger', (done) => {
it('should return error on InitLedger', async () => {
mockChaincode.putState.rejects('failed inserting key');
const myContract = new MyContract();
try {
await myContract.initLedger(transactionContext);
done.fail('initLedger should have failed');
} catch (err) {
expect(err.name).toBe('failed inserting key');
}
});
it('should return success on InitLedger', async () => {
const myContract = new MyContract();
await myContract.initLedger(transactionContext);
const ret = JSON.parse(
(
await mockChaincode.getState(
'09c2f565-9923-4b78-bd1c-ff635a70a880',
)
).toString(),
);
expect(ret).toEqual({ ...asset, docType: 'user' });
});
});
});
但是到目前为止,我收到的是以下错误: typeError:ctx.stub.putstate不是函数
。
可能缺少那里的东西。
还有一些简单的东西,例如
sinon
在 jest
中提供的
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
查看@TSN在评论中发送的链接后,我使用以下方法解决了它:
After looking into the link sent by @TSN in the comment, I solved it using the following approach: