【问题标题】:How to run near-js-api tests against a localnet with multiple contracts如何针对具有多个合同的本地网络运行 Near-js-api 测试
【发布时间】:2021-01-14 11:39:33
【问题描述】:

我已经设置了节点:

nearup run localnet --binary-path ~/code/nearcore/target/release

我正在尝试运行一个开玩笑的测试用例:

beforeAll(async function () {
  // NOTE: nearlib and nearConfig are made available by near-cli/test_environment
  const near = await nearlib.connect(nearConfig)
})

但是,显然缺少如何在本地节点上创建测试帐户的步骤。这是错误:

 ● Test suite failed to run

    Can not sign transactions for account test.near, no matching key pair found in Signer.

      at node_modules/near-api-js/lib/account.js:83:23
      at Object.exponentialBackoff [as default] (node_modules/near-api-js/lib/utils/exponential-backoff.js:7:24)
      at Account.signAndSendTransaction (node_modules/near-api-js/lib/account.js:80:24)
      at Account.createAndDeployContract (node_modules/near-api-js/lib/account.js:176:9)
      at LocalTestEnvironment.setup (node_modules/near-cli/test_environment.js:39:9)

看起来near-js-api 也被硬编码为只部署一个合约。我需要测试多个合同。如何部署多个合约?来自near-js-api test_environment.js

class LocalTestEnvironment extends NodeEnvironment {
    constructor(config) {
        super(config);
    }

    async setup() {
        this.global.nearlib = require('near-api-js');
        this.global.nearAPI = require('near-api-js');
        this.global.window = {};
        let config = require('./get-config')();
        this.global.testSettings = this.global.nearConfig = config;
        const now = Date.now();
        // create random number with at least 7 digits
        const randomNumber = Math.floor(Math.random() * (9999999 - 1000000) + 1000000);
        config = Object.assign(config, {
            contractName: 'test-account-' + now + '-' + randomNumber,
            accountId: 'test-account-' + now + '-' + randomNumber
        });
        const keyStore = new nearAPI.keyStores.UnencryptedFileSystemKeyStore(PROJECT_KEY_DIR);
        config.deps = Object.assign(config.deps || {}, {
            storage:  this.createFakeStorage(),
            keyStore,
        });
        const near = await nearAPI.connect(config);

        const masterAccount = await near.account(testAccountName);
        const randomKey = await nearAPI.KeyPair.fromRandom('ed25519');
        const data = [...fs.readFileSync('./out/main.wasm')];
        await config.deps.keyStore.setKey(config.networkId, config.contractName, randomKey);
        await masterAccount.createAndDeployContract(config.contractName, randomKey.getPublicKey(), data, INITIAL_BALANCE);

        await super.setup();
    }

near-js-sdk 本身正在针对神秘的共享测试进行部署

    case 'ci':
        return {
            networkId: 'shared-test',
            nodeUrl: 'https://rpc.ci-testnet.near.org',
            masterAccount: 'test.near',
        };

【问题讨论】:

    标签: nearprotocol


    【解决方案1】:

    如何部署多个合约?

    您可以使用masterAccount.createAndDeployContracttest_environment.js 相同。除了一些常见的初始化之外,没有什么特别之处 - 您可以直接创建测试所需的任何帐户/合约。

    near-js-sdk 本身正在针对神秘的共享测试进行部署

    这是可用于运行集成测试的共享网络。除非您想将您的开发工作保密 - 建议您使用运行测试的方式(因为当前可用于测试的最真实的环境)。

    但是,显然缺少如何在本地节点上创建测试帐户的步骤。

    如果您使用create-near-app 创建项目,您可能已经在neardev/ 项目文件夹中有相应的test.near 键。这就是为什么上述神秘环境通常开箱即用的原因。

    对于您的本地环境,您需要自己创建test.near

    NODE_ENV=local near create-account test.near --masterAccount some-existing-account
    
    

    之后,您可以将密钥复制到本地格式(或者只需重新配置 UnencryptedFileSystemKeyStore 以使用 ~/.near-credentials 路径):

    cp ~/.near-credentials/local/test.near.json project/dir/neardev/local/test.near.json
    

    【讨论】:

      猜你喜欢
      • 2022-08-16
      • 1970-01-01
      • 2011-02-06
      • 2012-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-28
      相关资源
      最近更新 更多