Ana içeriğe geç

Solidity ve Truffle sürekli entegrasyon kurulumu

solidityakıllı kontratlartest etmektruffleganache
Orta düzey
Markus Waas
soliditydeveloper.com(opens in a new tab)
5 Haziran 2020
4 dakikalık okuma minute read

Truffle ile sürekli entegrasyon (CI), temel bir test setini uyguladıktan sonra geliştirme yapmak için harikadır. Bir çekme talebini(opens in a new tab) birleştirmeden önce oldukça uzun testler yapmanızı ve ek araçlar kullanarak çeşitli istatistikleri takip etmenizi sağlar.

Sürekli entegrasyonumuzu kurmak için Truffle Metacoin Box(opens in a new tab) kullanacağız. Travis CI veya Circle CI'yi seçebilirsiniz.

Travis CI kurulumu

Travis CI(opens in a new tab) eklemek basittir. Projenin kök dizinine yalnızca bir .travis.yml yapılandırma dosyası eklemeniz gerekecek:

1language: node_js
2node_js:
3 - 10
4
5cache: npm
6
7before_script:
8 - echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
9
10script:
11 - npm test
Tümünü göster

Şimdilik çok karmaşıklaştırmıyoruz ve yalnızca Truffle birim testlerini yürüten test komut dosyasını çalıştırıyoruz. Ancak bir sorunumuz var, Travis CI makinesinde kullanılabilir bir blok zinciri olmayacak. Bunun için basit bir düzeltme, npm install ganache-cli ve bunu testten önce çalıştırmaktır. Bunu npx ganache-cli > /dev/null satırıyla bir bash komut dosyası ekleyerek npx truffle test çağrısından önce yapabilirsiniz. Tam örnek bash komut dosyası(opens in a new tab).

Circle CI kurulumu

CircleCi(opens in a new tab) daha uzun bir yapılandırma dosyası gerektirir. Ek npm ci(opens in a new tab) komutu Travis'te otomatik olarak yapılır. Bağımlılıkları npm install'dan daha hızlı ve daha güvenli kurar. Testlerden önce ganache-cli'yi çalıştırmak için yine Travis versiyonundaki aynı komut dosyasını kullanıyoruz.

1version: 2
2
3aliases:
4 - &defaults
5 docker:
6 - image: circleci/node:10
7
8 - &cache_key_node_modules
9 key: v1-node_modules-{{ checksum "package-lock.json" }}
10
11jobs:
12 dependencies:
13 <<: *defaults
14 steps:
15 - checkout
16 - restore_cache:
17 <<: *cache_key_node_modules
18 - run:
19 name: Install npm dependencies
20 command: |
21 if [ ! -d node_modules ]; then
22 npm ci
23 fi
24 - persist_to_workspace:
25 root: .
26 paths:
27 - node_modules
28 - build
29 - save_cache:
30 paths:
31 - node_modules
32 <<: *cache_key_node_modules
33
34 test:
35 <<: *defaults
36 steps:
37 - checkout
38 - attach_workspace:
39 at: .
40 - run:
41 name: Unit tests
42 command: npm test
43
44workflows:
45 version: 2
46 everything:
47 jobs:
48 - dependencies
49 - test:
50 requires:
51 - dependencies
Tümünü göster

Eth-gas-reporter eklentisini ekleme

Eth-gas-reporter eklentisi, akıllı sözleşme fonksiyonlarınızın gaz maliyetlerini takip etmek için oldukça kullanışlıdır. CI'nizde bulundurmak, çekme talepleri eklerken farkları göstermek için ayrıca yararlı olacaktır.

1. Adım: Eth-gas-reporter eklentisini ve kod kontrollerini kurun

npm install --save-dev eth-gas-reporter
npm install --save-dev @codechecks/client

2. Adım: Eklentiyi truffle-config.js içindeki mocha ayarlarına ekleyin

Seçeneklere bakın(opens in a new tab)

1module.exports = {
2 networks: { ... },
3 mocha: {
4 reporter: 'eth-gas-reporter',
5 reporterOptions: {
6 excludeContracts: ['Migrations']
7 }
8 }
9};
Tümünü göster
Kopyala

3. Adım: Projenizin kök dizinine bir codechecks.yml ekleyin

1checks:
2 - name: eth-gas-reporter/codechecks

4. Adım: Test komutundan sonra kod kontrollerini çalıştırın

- npm test
- npx codechecks

5. Adım: Bir Codechecks hesabı oluşturun

Bu kadar. Artık çekme talebinizin gaz maliyetlerindeki değişiklikler hakkında güzel bir rapor bulacaksınız.

Örnek gaz raporu

Solidity-coverage eklentisini ekleme

solidity-coverage eklentisi ile, testlerinizin kod yollarınızın ne kadarını kapsadığını kontrol edebilirsiniz. Bunu CI'ınıza eklemek, kurulduktan sonra kullanımını çok kolay hâle getirir.

1. Adım: Bir metacoin projesi oluşturun ve kapsama araçlarını kurun

npm install --save-dev truffle coveralls solidity-coverage

2. Adım: truffle-config.js'deki eklentiler dizisine solidity-coverage ekleyin

1module.exports = {
2 networks: {...},
3 plugins: ["solidity-coverage"]
4}
Kopyala

3. Adım: Coverage komutlarını .travis.yml veya Circle CI config.yml dosyasına ekleyin

- npx truffle run coverage
- cat coverage/lcov.info | npx coveralls

Solidity coverage, kendi ganache-cli'sini başlatır, bu yüzden bu konuda endişelenmemize gerek yok. Yine de normal test komutunu değiştirmeyin, coverage'ın ganache-cli'si farklı şekilde çalışır ve bu nedenle düzenli birim testleri çalıştırmanın yerini alamaz.

4. Adım: Depoyu coveralls'a ekleyin

Örnek coverall

Diğer fikirler

İşte oldu. Sürekli entegrasyon, geliştirmeleriniz için çok faydalı bir stratejidir. Truffle-CI-Example(opens in a new tab)'da tam bir örneğe göz atabilirsiniz. Sadece Circle-CI veya Travis'i çıkardığınızdan emin olun, bir tane yeterlidir!

Son düzenleme: @kaanmetu(opens in a new tab), 19 Ocak 2024

Bu rehber yararlı oldu mu?