首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >松露JS测试不起作用

松露JS测试不起作用
EN

Stack Overflow用户
提问于 2018-06-01 02:46:14
回答 1查看 1.1K关注 0票数 0

我在Truffle框架中有一个可靠的契约,我不明白为什么我的JS测试不能工作。

我正在尝试测试'setPlayers‘函数,契约可以工作,测试正在运行,但我不能理解如何在测试中调用该函数:

代码语言:javascript
复制
pragma solidity ^0.4.23;

contract Swindle {
    string  public eventName;
    uint public entryFee;
    string[] public players;
    string public winner;
    uint public winnings;

    function comp(string _eventName, uint _entryFee) public {
        eventName = _eventName;
        entryFee = _entryFee;
    }

    function addPlayers(string _player) public {
        players.push(_player);
    }

    function winner(string _player) public returns (string, uint) {
        winner = _player;
        winnings = (players.length * entryFee);
        return (winner, winnings);
    } 
}

测试文件:

代码语言:javascript
复制
var Swindle = artifacts.require("Swindle");

contract('Swindle', function(accounts) {

    it('sets player to stuart', function(){
        return Swindle.deployed().then(function(instance) {
            swindle = instance;
            return swindle.addPlayers.call("stuart");
        }).then(function(swindle) {
            assert.equal(swindle.players[0], "stuart", "sets the total supply");
        })
    })
})

错误:

代码语言:javascript
复制
0 passing (302ms)
  1 failing

  1) Contract: Swindle
       sets player to stuart:
     TypeError: Cannot read property '0' of undefined
      at test/test-swindle.js:10:32
      at <anonymous>
      at process._tickCallback (internal/process/next_tick.js:118:7)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-01 03:46:30

在契约中没有您在测试中提到的setPlayers方法。

你不能在你的javascript中直接访问合约的数组。首先,您需要调用players as方法。

代码语言:javascript
复制
it('sets player to stuart', function(){
        return Swindle.deployed().then(function(instance) {
            swindle = instance;
            return swindle.addPlayers.call("stuart");
        }).then(function(swindle) {
            return swindle.players();
        }).then(function(players) {
            assert.equal(players[0], "stuart", "sets the total supply");
        })
    })

你可以使用async/await来获得更好的测试可读性。

代码语言:javascript
复制
it('sets player to stuart', async () => {
    let swindle = await Swindle.deployed();
    await swindle.addPlayers.call("stuart");
    let players = await swindle.players.call();
    assert.equal(players[0], "stuart", "sets the total supply");
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50630871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档