
Security News
Browserslist-rs Gets Major Refactor, Cutting Binary Size by Over 1MB
Browserslist-rs now uses static data to reduce binary size by over 1MB, improving memory use and performance for Rust-based frontend tools.
solidity-coverage
Advanced tools
[](https://badge.fury.io/js/solidity-coverage) [](https://circleci.com/gh/sc-forks/solidity-coverage) [;
module.exports = {
networks: {
development: {
host: '127.0.0.1',
port: 8545,
network_id: '*',
},
},
plugins: ['solidity-coverage'],
};
Integration with Truffle
solidity-coverage integrates seamlessly with the Truffle framework, allowing you to run your tests and generate coverage reports without additional setup. This integration simplifies the process of ensuring your smart contracts are thoroughly tested.
const coverage = require('solidity-coverage');
module.exports = {
networks: {
development: {
host: '127.0.0.1',
port: 8545,
network_id: '*',
},
},
plugins: ['solidity-coverage'],
};
Command Line Interface
You can use the command line interface to run solidity-coverage directly from your terminal. This command will execute your tests and generate a coverage report, making it easy to incorporate into your CI/CD pipeline.
npx solidity-coverage
Truffle is a development environment, testing framework, and asset pipeline for Ethereum. While it does not provide code coverage out of the box, it can be used in conjunction with solidity-coverage to achieve similar functionality. Truffle focuses more on the overall development and deployment process of smart contracts.
Hardhat is a development environment for Ethereum software. It provides a flexible and extensible way to manage and automate the recurring tasks inherent to developing smart contracts and dApps. Hardhat has its own coverage plugin, hardhat-coverage, which offers similar functionality to solidity-coverage but is designed to work specifically with the Hardhat environment.
Embark is a framework for serverless Decentralized Applications using Ethereum, IPFS, and other platforms. It includes a testing framework and can be extended with plugins to provide code coverage. Embark is more comprehensive in scope, covering the entire dApp development lifecycle.
solidity-coverage
is in development and its accuracy is unknown. If you
find discrepancies between the coverage report and your suite's behavior, please open an
issue.solidity-coverage
is Solcover$ npm install --save-dev solidity-coverage
$ ./node_modules/.bin/solidity-coverage
Tests run signficantly slower while coverage is being generated. A 1 to 2 minute delay between the end of Truffle compilation and the beginning of test execution is possible if your test suite is large. Large Solidity files can also take a while to instrument.
By default, solidity-coverage generates a stub truffle.js
that accomodates its special gas needs and
connects to a modified version of testrpc on port 8555. If your tests will run on the development network
using a standard truffle.js
and testrpc instance, you shouldn't have to do any configuration. If your tests depend on logic or special options added to truffle.js
you should declare a coverage network there following the example below.
Example
module.exports = {
networks: {
development: {
host: "localhost",
port: 8545,
network_id: "*"
},
coverage: {
host: "localhost",
network_id: "*",
port: 8555, // <-- If you change this, also set the port option in .solcover.js.
gas: 0xfffffffffff, // <-- Use this high gas value
gasPrice: 0x01 // <-- Use this low gas price
},
...etc...
}
};
You can also create a .solcover.js
config file in the root directory of your project and specify
additional options if necessary:
Example:
module.exports = {
port: 6545,
testrpcOptions: '-p 6545 -u 0x54fd80d6ae7584d8e9a19fe1df43f04e5282cc43',
testCommand: 'mocha --timeout 5000',
norpc: true,
dir: './secretDirectory',
skipFiles: ['Routers/EtherRouter.sol']
};
Option | Type | Default | Description |
---|---|---|---|
accounts | Number | 35 | Number of accounts to launch testrpc with. |
port | Number | 8555 | Port to run testrpc on / have truffle connect to |
norpc | Boolean | false | Prevent solidity-coverage from launching its own testrpc. Useful if you are managing a complex test suite with a shell script |
testCommand | String | truffle test | Run an arbitrary test command. ex: mocha --timeout 5000 . NB: Also set the port option to whatever your tests require (probably 8545). |
testrpcOptions | String | --port 8555 | options to append to a command line invocation of testrpc. NB: Using this overwrites the defaults so always specify a port in this string and in the port option |
copyNodeModules | Boolean | false | Copies node_modules into the coverage environment. May significantly increase the time for coverage to complete if enabled. Useful if your contracts import solidity files from an npm installed package. |
skipFiles | Array | ['Migrations.sol'] | Array of contracts (with paths expressed relative to the contracts directory) that should be skipped when doing instrumentation. Migrations.sol is skipped by default, and does not need to be added to this configuration option if it is used. |
dir | String | . | Solidity-coverage copies all the assets in your root directory (except node_modules ) to a special folder where it instruments the contracts and executes the tests. dir allows you to define a relative path from the root directory to those assets. Useful if your contracts & tests are within their own folder as part of a larger project. |
Solutions to common issues people run into using this tool:
send
and transfer
throwing in my tests?Contributions are welcome! If you're opening a PR that adds features please consider writing some
unit tests for them. You could
also lint your submission with npm run lint
. Bugs can be reported in the
issues.
FAQs
Code coverage for Solidity testing
The npm package solidity-coverage receives a total of 214,899 weekly downloads. As such, solidity-coverage popularity was classified as popular.
We found that solidity-coverage demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 3 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Browserslist-rs now uses static data to reduce binary size by over 1MB, improving memory use and performance for Rust-based frontend tools.
Research
Security News
Eight new malicious Firefox extensions impersonate games, steal OAuth tokens, hijack sessions, and exploit browser permissions to spy on users.
Security News
The official Go SDK for the Model Context Protocol is in development, with a stable, production-ready release expected by August 2025.