Испытание трюфелем и Ганаш-клиом провалилось
Итак, у меня есть эта настройка: 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 ответ
Я думаю, это то, что вы ищете:
Путь к файлу: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 ошибки:
sale
не определено. У меня есть ощущение, что вы на самом деле имели в видуMyContract
,Чтобы использовать наименьший метод в ChaiJS, вам нужно убедиться, что вы передаете целые числа.
balanceOf
звонок возвращаетсяBigNumber
или жеBN
объект, и вы не можете использовать его с.least
метод.
К вашему сведению, Truffle v5 теперь использует BN
по умолчанию (ранее BigNumber
). Подробнее об этом здесь.
Позвольте мне знать, если это помогает.