お世話になります。
あるスマートコントラクトのテストで下記のようにthisを使って変数を指定している部分があるのですが、このthisがどのような意図で使われているのか分からないので、ご教授いただけると幸いです。
thisがこのcontract自体のオブジェクトだと思うのですが、外からインスタンスを作ってこれらの変数にアクセスしないので、beforeEachの外側でletやconstなどで宣言して、そこに代入でも良いのではと考えています。
正直あまり理解できていないので的外れなことを言っているかもしれないのですが、ご回答よろしくお願いします。
###サンプルコード
javascript
1contract("SampleContract", function(){ 2 beforeEach(async () => { 3 this.name = "name" 4 this.value = "value" 5 }); 6 7 describe('functions', () => { 8 it('should be correct return', async () => { 9 await SampleContract.new(this.name, this.value); 10 // 以下省略 11 }); 12 }) 13}
以下追記
変に省略してしまい、逆に混乱させてしまって申し訳ありません。
こちらが参考にしていたテストです。この中の1つが下記のコードです。
コードの中でlet token
と宣言したり、this.startBlock
に代入したり、使い分けている様なのですが、どの様な意図で使い分けているか分からないため質問させて頂きました。
javascript
1import alis from '../utilities/alis'; 2import ether from './helpers/ether'; 3import EVMThrow from './helpers/EVMThrow'; 4 5import { AlisToken, AlisCrowdsale, should, cap, tokenCap, rate, icoStartTime, 6 initialAlisFundBalance, goal, whiteList, 7} from './helpers/alis_helper'; 8 9contract('AlisToken', ([wallet]) => { 10 let token; 11 const expectedTokenSupply = alis(240000000); 12 13 beforeEach(async function () { 14 this.startBlock = web3.eth.blockNumber + 10; 15 this.endBlock = web3.eth.blockNumber + 20; 16 17 this.crowdsale = await AlisCrowdsale.new(this.startBlock, icoStartTime, this.endBlock, 18 rate.base, wallet, ether(cap), alis(tokenCap), initialAlisFundBalance, ether(goal), whiteList); 19 20 token = AlisToken.at(await this.crowdsale.token()); 21 }); 22 23 it('owner should be able to burn tokens', async () => { 24 const { logs } = await token.burn(alis(10000000), { from: wallet }); 25 26 const balance = await token.balanceOf(wallet); 27 balance.should.be.bignumber.equal(expectedTokenSupply); 28 29 const totalSupply = await token.totalSupply(); 30 totalSupply.should.be.bignumber.equal(expectedTokenSupply); 31 32 const event = logs.find(e => e.event === 'Burn'); 33 should.exist(event); 34 }); 35 36 it('cannot burn more tokens than your balance', async () => { 37 await token.burn(alis(260000000), { from: wallet }) 38 .should.be.rejectedWith(EVMThrow); 39 }); 40});
回答2件
あなたの回答
tips
プレビュー