Ich erstelle einen Testfall der Solidität in Trüffel und meine Soliditätsfunktion ist unten angegeben, für die ich Testfälle erstelle
function isValidBuyer(uint256 buyTokenQty, uint256 senderValue) public constant returns (bool)
{
if(!isUserExist(msg.sender))
{
msg.sender.transfer(senderValue); //Refund Ether
return false ;
}
else
{
return true ;
}
}
Und meine Testfälle sind wie unten angegeben
it('TCC001: should check invalid buyer and should return false', async () => {
let tempRes1=await instChain.isValidBuyer(100,1,{from:account2,gas:'220000'});
assert.isTrue(!tempRes1);
});
Beim Testen der if-Klausel der Funktion in diesem Test erhalte ich einen Fehler
VM-Ausnahme während der Verarbeitung der Transaktion: Zurücksetzen
Ein interessanter Fall ist die Funktion isValidBuyer() , wenn ich 1 wei übergebe, gibt es die oben erwähnte Ausnahme, aber wenn ich 0,99 oder weniger sende, wird sie erfolgreich ohne Fehler ausgeführt.
Hier ist nicht ganz klar, was Sie erreichen wollen. Es scheint, dass Sie versuchen, Token oder Ether zurückzuerstatten, die noch nicht übertragen wurden?
Aber hier sind ein paar Anmerkungen zu Ihrem Code:
ich. Wenn Sie Ether überweisen, müssen Sie den Betrag nicht als Funktionsargument angeben. Aber Sie müssen das Schlüsselwort hinzufügen payable
und den Wert so übertragen:
instChain.isValidBuyer(100,1,{from:account2,gas:'220000',value:<AMOUNT IN WEI>});
ii. Sie verwenden das Schlüsselwort constant
für eine Statusänderungsoperation (Schreiboperation) und es kann nicht funktionieren, da dieses Schlüsselwort ausschließlich für die Nur-Lese-Funktion bestimmt ist. Sie können keine Operation aufrufen, die den Status ändert (wie Geld übertragen oder Daten speichern). Art Funktion.
iii. Sie würden einfach prüfen require
, ob das Mitglied existiert, und den an den Vertrag übergebenen Betrag + verbleibendes Gas zurückerstatten.
function isValidBuyer(uint256 buyTokenQty, uint256 senderValue) public payable returns (bool) {
// access value with `msg.value`
require(isUserExist(msg.sender)) {
return true
}
Ritesh Gupta