Испытание трюфелем и Ганаш-клиом провалилось - PullRequest
0 голосов
/ 21 декабря 2018

Итак, у меня есть эта настройка: truffle и ganache-cli

Я отправляю немного эфира в мой контракт, вот соответствующая часть моего контракта:

    mapping(address => uint256) public balanceOf;

    function () payable public {
              uint amount = msg.value;
              balanceOf[msg.sender] += amount;
        }

В трюфеле я посылаю эфир.

it("Test if can be payed", function(){
    return web3.eth.sendTransaction({
           from:fromAddr, 
           to:MyContract.address,  
           value:amountToSend
    }).then(function(res){  
           expect(res).to.not.be.an("error"); // test passed
    });
 });

it("Test if contract received ether", function(){
        return web3.eth.getBalance(MyContract.address, 
               function(err, res){
                        expect(parseInt(res)).to.be.at.least(1000000000000000000); // test passed
                });
});

it("Catch if balanceOf "+fromAddr, function(){
        return sale.balanceOf.call(fromAddr).then(function(res){
                        expect(parseInt(res)).to.be.at.least(1); // fails the test
               });
});

Я правильно делаю?В чем может быть причина провала теста?тест трюфеля:

AssertionError: expected 0 to be at least 1
      + expected - actual

      -0
      +1

Я могу предоставить больше информации, если это необходимо.

ОБНОВЛЕНИЕ: для уточнения по sale, который является глобальной переменной.

   it("Test if MyContract is deployed", function(){
            return MyContract.deployed().then(function(instance){
                   sale = instance;
            });
   });

1 Ответ

0 голосов
/ 21 декабря 2018

Я думаю, это то, что вы ищете:

Путь к файлу: test / vault.js

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

contract("Vault test", async accounts => {

    // Rely on one instance for all tests.
    let vault;
    let fromAccount   = accounts[0];
    let oneEtherInWei = web3.utils.toWei('1', 'ether');

    // Runs before all tests.
    // https://mochajs.org/#hooks
    before(async () => {
        vault = await Vault.deployed();
    });

    // The `receipt` will return boolean.
    // https://web3js.readthedocs.io/en/1.0/web3-eth.html#gettransactionreceipt
    it("Test if 1 ether can be paid", async () => {
        let receipt = await web3.eth.sendTransaction({
            from:  fromAccount, 
            to:    vault.address, 
            value: oneEtherInWei
        });
        expect(receipt.status).to.equal(true);
    });

    it("Test if contract received 1 ether", async () => {
        let balance = await web3.eth.getBalance(vault.address);
        expect(balance).to.equal(oneEtherInWei);
    });

    // In Web3JS v1.0, `fromWei` will return string.
    // In order to use `at.least`, string needs to be parsed to integer.
    it("Test if balanceOf fromAccount is at least 1 ether in the contract", async () => {
        let balanceOf    = await vault.balanceOf.call(fromAccount);
        let balanceOfInt = parseInt(web3.utils.fromWei(balanceOf, 'ether'));
        expect(balanceOfInt).to.be.at.least(1);
    });
});

Вы можете увидеть полный проект здесь .Обратите внимание, что я использую Truffle v5 и Ganache v2 .Посмотрите файл README внутри этого репозитория GitLab.

Возвращаясь к вашему вопросу, было 2 ошибки:

  1. sale не определено.У меня такое ощущение, что вы на самом деле имели в виду MyContract.

  2. Чтобы использовать метод наименьшего в ChaiJS, вам необходимо убедиться, что вы передаетецелые числа.Вызов balanceOf возвращает объект BigNumber или BN, и вы не можете использовать его с методом .least.

FYI, Truffle v5 теперь использует BNпо умолчанию (ранее BigNumber).Подробнее об этом здесь .

Дайте мне знать, если это поможет.

...