ethers.js/tests/README.md

99 lines
2.7 KiB
Markdown
Raw Normal View History

Ethers Test Suite
=================
There are a lot of test cases, and it can take a while for them to all run.
Please be patient.
Running Tests
-------------
**Node.js:**
```
# Test everything (in node)
/Users/ricmoo/ethers.js> npm test
# Test everything (in phantomjs)
/Users/ricmoo/ethers.js> npm run-script test-phantomjs
# Test just one specific package
# Test the Solidity ABI coder
# - See tests/contract-interface.json.gz
/Users/ricmoo/ethers.js> ./node_modules/.bin/mocha test-contract-interface.js
# Test HD Wallet derivations
# - See tests/hdnode.json.gz
/Users/ricmoo/ethers.js> ./node_modules/.bin/mocha test-hdnode.js
# Test general utilities
# - See tests/namehash.json.gz
# - See tests/rlp-coder.json.gz
# - See tests/units.json.gz
/Users/ricmoo/ethers.js> ./node_modules/.bin/mocha test-utils.js
# Test accounts and addresses
# - See tests/accounts.json.gz
/Users/ricmoo/ethers.js> ./node_modules/.bin/mocha test-account.js
# Test encrypting/decrypting JSON wallets and transaction parsing/signing
# - See tests/transactions.json.gz
# - See tests/wallets.json.gz
/Users/ricmoo/ethers.js> ./node_modules/.bin/mocha test-wallet.js
```
Test Cases
----------
The testcases take up a large amount of space, so they are gzipped in the
`/tests/tests/` folder. See `/tests/utils.js` for saving and loading.
To dump a test case from the terminal, you can use:
```
/Users/ricmoo/ethers.js> cat ./tests/accounts.json.gz | gunzip
```
Building Testcases
------------------
Each suite of testcases is produced from a variety of sources. Many include a
2019-10-13 19:25:55 +03:00
specific set of test vectors as well as procedurally generated tests using known
correct implementations.
The `contract-interface` test cases are created by selecting a (deterministically) random
set of types and values, a solidity contract is then created to represent a contract with
the correct return types and values, which is then compiled and deployed to a local
Ethereum node, then executed once mined.
As a result, genearting the test cases can take quite some time. So, they are generated using
a separate set of files found in make-tests.
- make-accounts
- make-contract-interface
- make-hdnode
- makr-rlpcoder
- make-transaction
- make-wallets
Additional Test Vectors:
- **make-tests/test-mnemonics** -- The trezor test vectors for BIP39
- **make-tests/test-wallets** -- Sample JSON Wallets (crowdsale and Geth)
All generated JSON test files are then placed gzipped in `tests` with the extension '.json.gz'.
Adding Test Cases
-----------------
For any patch, feature upgrade or pull request of any sort, there must be relevant
test cases added and all test cases must pass.
If you report a bug and provide test cases, it will get attention sooner.