You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Truffle测试Solidity合约时调用变更方法后状态未更新是什么原因?

问题原因

你的智能合约本身逻辑没有问题,状态未变更的核心原因是Truffle测试代码的异步流程处理错误:

  • 调用合约写入类方法(会修改链上状态的changeProperty方法)属于异步操作,会返回Promise对象。你在对应then回调中没有将这个Promise return出去,导致后续执行逻辑不会等待这笔交易打包上链、状态生效,就直接读取了contractProperty的值,此时读到的自然是修改前的初始值10。
修复方案

仅需要在testInstance.changeProperty(10000)前添加return即可,修改后的对应代码片段如下:

.then(() => {
    return testInstance.changeProperty(10000);
})

你也可以改用async/await写法降低异步逻辑出错概率,参考完整测试代码:

const SmartContract = artifacts.require("SmartContract");

contract('SmartContract', function(accounts) {
    it('returns correctly', async () => {
        const testInstance = await SmartContract.deployed();
        // 等待修改状态的交易确认完成
        await testInstance.changeProperty(10000);
        const val = await testInstance.contractProperty();
        assert.equal(val.toString(), '10000');
    });
});

内容的提问来源于stack exchange,提问作者geo10

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 18:21:04