Ich habe Probleme beim Testen meiner Verträge: Ich verwende Mocha, Chai und Callingtruffle test
Ich testeLoanRecord.sol
contract LoanRecord {
public bool on;
...
constructor(...){
...
on = false;
}
function external turnOn(){
on = true;
}
}
Und testen in record.test.js:
var assert = require('chai').assert
var LoanRecord = artifacts.require("../../contracts/record/LoanRecord.sol");
contract ('Record', function (accounts) {
describe("#turnOn()", function () {
it("should turn on a loan record instance", async function () {
loanrecord = await LoanRecord.new(
1,
18,
0x0000000000000000000000000000000000000002,
0x0000000000000000000000000000000000000001,
"LOAN"
);
await assert.equal(loanrecord.on, false)
await loanrecord.turnOn()
await assert.equal(loanrecord.on, true)
});
});
Allerdings erhalte ich:
1) Contract: Record
#turnOn()
should turn on a loan record instance:
AssertionError: expected [Function] to equal false
at Context.<anonymous> (test/record.js:15:26)
at <anonymous>
at process._tickCallback (internal/process/next_tick.js:188:7)
Warum wird eher loanrecord.on
zurückgegeben [Function]
als ein boolescher Typ?
Behoben (auch mit Hilfe von gitter@dwardu):
contract ('Record', function (accounts) {
describe("#turnOn()", function () {
it("should turn on a loan record instance", async function () {
loanrecord = await LoanRecord.new(
1,
18,
0x0000000000000000000000000000000000000002,
0x0000000000000000000000000000000000000001,
"LOAN"
);
var on = await loanrecord.on()
await assert.equal(on, false)
await loanrecord.turnOn()
var on = await loanrecord.on()
await assert.equal(on, true)
});
});
}
Die Fehlermeldung, die Sie erhalten, gibt Ihnen einen guten Hinweis zum Vergleichen der Funktion mit einem booleschen Wert. Dies bedeutet, dass eine Seite des Vergleichs eine Funktion und eine eine Variable (oder ein Wert) ist.
Für jede Variable in Ihren Solidity-Verträgen wird automatisch eine öffentliche Getter-Funktion generiert. Damit function on()
wird automatisch eine Funktion mit Signatur generiert, um auf den Wert der Variablen zuzugreifen on
. Daher müssen Sie beim Zugriff auf die Variablen auch über die Getter-Funktionen darauf zugreifen.
Ändern Sie Ihre await assert.equal(loanrecord.on, true)
zu await assert.equal(loanrecord.on(), true)
und es sollte funktionieren. Oder Sie müssen möglicherweise await
den on()
Wert der Funktion vor dem Vergleichen zurückgeben.
James