All Projects → specron → framework

specron / framework

Licence: MIT license
Lightweight, open source and magic-free framework for testing solidity smart contracts.

Programming Languages

typescript
32286 projects
solidity
1140 projects
javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to framework

ethereum-erc20
Fungible token implementation for the Ethereum blockchain.
Stars: ✭ 27 (-25%)
Mutual labels:  smart-contracts, contract, smart, eth
ethereum-crowdsale
0xcert protocol crowdsale contracts for Ethereum blockchain.
Stars: ✭ 15 (-58.33%)
Mutual labels:  smart-contracts, contract, smart, eth
ethereum-dex
Decentralized exchange implementation for the 0xcert protocol on the Ethereum blockchain.
Stars: ✭ 18 (-50%)
Mutual labels:  smart-contracts, contract, smart, eth
Eth Crypto
Cryptographic javascript-functions for ethereum and tutorials to use them with web3js and solidity
Stars: ✭ 420 (+1066.67%)
Mutual labels:  smart-contracts, web3, eth
laravel-web3
Laravel SDK wrapper for the Web3 PHP API client that interacts with the Ethereum blockchain.
Stars: ✭ 85 (+136.11%)
Mutual labels:  contract, web3, eth
erc721
The reference implementation of the ERC-721 non-fungible token standard.
Stars: ✭ 989 (+2647.22%)
Mutual labels:  smart-contracts, contract, eth
solidity-cli
Compile solidity-code faster, easier and more reliable
Stars: ✭ 49 (+36.11%)
Mutual labels:  smart-contracts, web3, solc
hardhat-abi-exporter
🧰 Export Solidity contract ABIs on compilation ⚙️
Stars: ✭ 29 (-19.44%)
Mutual labels:  smart-contracts, eth, solc
Kahlan
✔️ PHP Test Framework for Freedom, Truth, and Justice
Stars: ✭ 1,065 (+2858.33%)
Mutual labels:  tdd, test, spec
docs
Unleash Bitcoin's full potential with decentralized apps and smart contracts. The documentation covers key aspects of the Stacks network and technology and provides tutorials and other helpful content for developers.
Stars: ✭ 134 (+272.22%)
Mutual labels:  smart-contracts, web3
web3jdemo
功能强大的web3j以太坊用例,支持批量生成钱包,批量不同账户转账,查询余额等,监控,定时任务,交易mint等方法,持续更新中... ...
Stars: ✭ 262 (+627.78%)
Mutual labels:  web3, eth
zeneth
🏵️ Let Your ETH Chill — Gasless Ethereum account abstraction with Flashbots
Stars: ✭ 112 (+211.11%)
Mutual labels:  smart-contracts, eth
PancakeTokenSniper
BSC BNB Pancake token sniper, buy, take profit and rug check
Stars: ✭ 184 (+411.11%)
Mutual labels:  contract, smart
spec-pattern
Specification design pattern for JavaScript and TypeScript with bonus classes
Stars: ✭ 43 (+19.44%)
Mutual labels:  spec, specification
useWeb3
useWeb3 provides a curated overview of the best and latest resources on Ethereum, blockchain and Web3 development.
Stars: ✭ 325 (+802.78%)
Mutual labels:  smart-contracts, web3
eth-decoder
Simple library to decode ethereum transaction and logs
Stars: ✭ 32 (-11.11%)
Mutual labels:  smart-contracts, web3
Alsatian
TypeScript testing framework with test cases
Stars: ✭ 244 (+577.78%)
Mutual labels:  tdd, test
solidstate-solidity
💠 Upgradeable-first Solidity smart contract development library 💠
Stars: ✭ 264 (+633.33%)
Mutual labels:  smart-contracts, eth
vue-web3
🐙 Web3 blockchain bindings for Vue.js (inspired by Vuefire and Drizzle)
Stars: ✭ 63 (+75%)
Mutual labels:  web3, eth
sign-in-with-ethereum
Minimal example of sign in with Ethereum. Compatible with web3 browsers.
Stars: ✭ 25 (-30.56%)
Mutual labels:  web3, eth

Specron Framework

Build Status codecov

Specron is a lightweight, open source, magic-free framework for testing smart contracts written in Solidity. The testing suite is built on top of the Hayspec framework thus using TypeScript is supported.

Specron provides development environment for the Ethereum blockchain and includes useful tools which enable developers to easily write tests for smart contracts.

The source code is available on GitHub where you can also find our issue tracker.

Installation

Start by installing the Specron command-line tool.

$ npm install -g @specron/cli web3 solc

Specron depends on the latest web3 and solc packages, so make sure you have them globally installed. Specron also uses promises thus you need to use Promise polyfill when promises are not supported.

Getting started

Specron automates the testing process of your Solidity code. It doesn't require you to install certain applications in order to get started.

The Specron interface is designed to fully support the power of TypeScript when writing tests. It is magic-free which means you have a complete control and visibility of what the code does and how tests are executed. The testing flow should look familiar to any JavaScript or TypeScript developer.

Project initialization

Start by creating a new project folder.

$ mkdir myproject
$ cd myproject

Initialize the project and install the dependencies.

$ specron init
$ npm install

Run tests to verify everything works as expected.

$ npm test

Writing tests

The core test functionality is provided by the @specron/spec module which is automatically attached to your project at initialization. Here we explain some of the main framework features but please explore the source code to find out all the possibilities.

Initializing specs

The framework provides a Spec class which holds basically the whole testing power. You start your test by creating an instance of that class.

import { Spec } from '@specron/spec';

const spec = new Spec();

Testing features

The Spec instance provides methods that you can use when writing tests. Most of the time you will use the test method which performs the test you write.

spec.test('is true', async (ctx) => { // promise | function
  ctx.true(true);
});

There is also the skip method which prevents a test to be performed, and the only method which includes itself into the test process but excludes all other tests.

Nested specs

Tests can be nested using the spec method.

const colors = new Spec();
...
spec.spec('colors', colors);

Using callbacks

The framework provides before and after methods which are execute at the beginning and at the end of the spec case.

spec.before((stage) => {
  // execute before all tests
});
...
spec.after((stage) => {
  // execute after all tests
});

These methods have access to the stage of the spec instance. The stage is global to the whole spec stack which means that all settings are always preserved.

There are also the beforeEach and afterEach methods which are triggered before and after each test. These methods have access to the context and stage of the spec. The context represents a copy of a stage and is preserved between beforeEach, test and afterEach methods. This allows for testing atomic tests where a fresh context is always created for each test.

spec.beforeEach((context, stage) => {
  // execute before all tests
});
...
spec.afterEach((context, stage) => {
  // execute after all tests
});

Callback functions can be called multiple times and the execution will happen in a defined sequence.

Shared data

The context and the stage both provide a way to set and get values with proper TypeScript types.

interface Data {
  id: number;
  name: string;
}

const spec = new Spec<Data>();

spec.beforeEach((ctx) => {
  ctx.set('id', 100);
  ctx.set('name', 'John');
})

spec.test('is John with id=100', (ctx) => {
  const id = ctx.get('id');
  const name = ctx.get('name');
  ctx.is(id, 100);
  ctx.is(name, 'John');
})

Values set inside the before and after blocks are available to all spec methods. Values set in the beforeEach and afterEach blocks are available only on the context stack of each test.

Contract deployment

Stage and context both provide a series of different helper methods.

A very important method is the deploy() method which deploys a contract to a local blockchain process in the background and returns a contract instance.

const { instance, receipt } = await ctx.deploy({
  src: './contracts.json',
  contract: 'Main',
});

Using CLI

The @specron/cli module is automatically installed when you initialize the project. You can interact with the utility using the npx specron command in your terminal.

To get a list of available features use the --help flag.

$ npx specron --help

Running tests

Every test file must export the spec instance for the CLI to be able to detect the test.

export default spec;

Run the specron test command to run tests. Customize the files search by using the --match flag.

$ npx specron test --match ./**/*.test.*

TypeScript support

Install the ts-node NPM package then use the --require flag to enable TypeScript support.

specron --require ts-node/register

Project configuration

Specron configuration options can be saved inside the package.json file under the the specron key.

{
  "specron": {
    "compiler": {
      "build": "./build",
      "match": [
        "./src/**/*.sol"
      ],
      "severities": [
        "error",
        "warning"
      ],
      "evmVersion": "byzantium"
    },
    "flattener": {
      "build": "./build",
      "match": [
        "./src/**/*.sol"
      ],
      "severities": [
        "error",
        "warning"
      ]
    },
    "sandbox": {
      "port": 8545,
      "host": "localhost"
    },
    "test": {
      "server": true,
      "port": 8545,
      "host": "localhost",
      "match": [
        "./src/**/*.test.*"
      ]
    },
    "require": [
      "ts-node/register"
    ]
  }
}

Note that these options can be overriden by providing CLI arguments.

Using continuous integration

For a full example of a Solidity contract repository including continuous integration using Travis and Specron, see https://github.com/xpepermint/specron-example.

Packages

Package Description Version
@specron/cli Command-line interface. NPM Version
@specron/compiler Smart contracts compiler. NPM Version
@specron/flattener Smart contracts flattener. NPM Version
@specron/init Project structure initializer. NPM Version
@specron/sandbox Ethereum sandbox server. NPM Version
@specron/spec Core test suite. NPM Version

Contributing

See CONTRIBUTING.md for how to help out.

Licence

See LICENSE for details.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].