【问题标题】:Failing tests: cannot read properties of undefined(reading local) solana devnet失败的测试:无法读取未定义的属性(读取本地)solana devnet
【发布时间】:2023-01-09 05:07:45
【问题描述】:

您好,我正在尝试在锚点中测试我的第一个文件,但它一直出现此错误, 我得到的错误:

TypeError: Cannot read properties of undefined (reading 'local')
    at Suite.<anonymous> (/home/benny/mycalcdapp/tests/mycalcdapp.ts:6:36)
    at Object.create (/home/benny/mycalcdapp/node_modules/mocha/lib/interfaces/common.js:148:19)
    at context.describe.context.context (/home/benny/mycalcdapp/node_modules/mocha/lib/interfaces/bdd.js:42:27)
    at Object.<anonymous> (/home/benny/mycalcdapp/tests/mycalcdapp.ts:5:1)
    at Module._compile (node:internal/modules/cjs/loader:1105:14)
    at Module.m._compile (/home/benny/mycalcdapp/node_modules/ts-node/src/index.ts:439:23)
    at Module._extensions..js (node:internal/modules/cjs/loader:1159:10)

.ts 文件进行测试:

const assert = require('assert');
const anchor = require('@project-serum/anchor');
const { SystemProgram } = anchor.web3;

describe('mycalcdapp', () => {
  const provider = anchor.Provider.local();
  anchor.setProvider(provider);
  const calculator = anchor.web3.Keypair.generate();
  const program = anchor.workspace.mycalcdapp;

  it('creates a calculator', async () => {
    await program.rpc.create('Welocme to solana', {
      accounts: {
        calculator: calculator.publicKey,
        user: provider.wallet.publicKey,
        system_program: SystemProgram.programId,
      },
      signers: [calculator],
    });
    const account = await program.account.calculator.fetch(
      calculator.publicKey
    );
    assert.ok(account.greeting === 'Welcome to solana');
  });
});

我已经看到另一个类似的关于无法读取 rpc 的 stackoverflow postv,但也没有得到回答:(

【问题讨论】:

    标签: typescript solana anchor-solana


    【解决方案1】:

    所以除了导入 * 作为锚点之外,我还必须从 @project-serum/anchor 导入 AnchorProvider 和 web3。 然后我们将提供者设置为 const provider = AnchorProvider.local() 也将const {SystemProgram } = anchor.web3更改为 const {SystemProgram } = web3 并更改 system_program inside accounts > create rpc to systemProgram 瞧,我们的测试成功了!! 完整测试代码:

    import assert from 'assert';
    import * as anchor from '@project-serum/anchor';
    import { AnchorProvider, web3 } from '@project-serum/anchor';
    const { SystemProgram } = web3;
    
    describe('mycalcdapp', () => {
      const provider = AnchorProvider.local();
      anchor.setProvider(provider);
      const calculator = anchor.web3.Keypair.generate();
      const program = anchor.workspace.Mycalcdapp;
    
      it('creates a calculator', async () => {
        await program.rpc.create('Welcome to solana', {
          accounts: {
            calculator: calculator.publicKey,
            user: provider.wallet.publicKey,
            systemProgram: SystemProgram.programId,
          },
          signers: [calculator],
        });
        const account = await program.account.calculator.fetch(
          calculator.publicKey
        );
        assert.ok(account.greeting === 'Welcome to solana');
      });
    });
    

    【讨论】:

    • 正如目前所写,您的答案尚不清楚。请edit 添加更多详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写出好的答案的信息in the help center
    【解决方案2】:

    我认为您代码中的主要问题是您的 dapp 的名称。

     const program = anchor.workspace.mycalcdapp;
    

    你的工作区名称应该用大写字母初始化

     const program = anchor.workspace.Mycalcdapp;
    

    同样在“it”块中welcome拼写错误

    await program.rpc.create('Welocme to solana', {
    

    【讨论】:

      猜你喜欢
      • 2022-06-22
      • 2022-01-11
      • 2021-05-14
      • 1970-01-01
      • 1970-01-01
      • 2021-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多