npm buidler

# buidler-waffle

Buidler plugin for integration with Waffle.

# What

You can use this plugin to build smart contract tests using Waffle in Buidler, taking advantage of both.

This plugin adds a Buidler-ready version of Waffle to the Buidler Runtime Environment, and automatically initializes the Waffle Chai matchers.

# Installation

npm install --save-dev @nomiclabs/buidler-waffle '[email protected]^3.0.0' @nomiclabs/buidler-ethers '[email protected]^5.0.0'

And add the following statement to your buidler.config.js:

usePlugin("@nomiclabs/buidler-waffle");

# Tasks

This plugin creates no additional tasks.

# Environment extensions

This plugin adds a waffle object to the Buidler Runtime Environment. This object has all the Waffle functionality, already adapted to work with Buidler.

The waffle object has these properties:

  • provider
  • deployContract
  • solidity
  • link
  • deployMockContract
  • createFixtureLoader
  • loadFixture

This plugin depends on @nomiclabs/buidler-ethers, so it also injects an ethers object into the BRE, which is documented here.

# Usage

Once installed, you can build your tests almost like in Waffle.

Instead of importing things from ethereum-waffle, you access them from the waffle property of the Buidler Runtime Environment.

For example, instead of doing

import { deployContract } from "ethereum-waffle";

you should do

import { waffle } from "@nomiclabs/buidler";
const { deployContract } = waffle;

Also, you don't need to call chai.use.

Note that by default, Buidler save its compilation output into artifacts/ instead of build/. You can either use that directory in your tests, or customize your Buidler config.

# TypeScript support

This plugin supports TypeScript by following these steps:

  1. Add these to your tsconfig.json's files array:
  • "node_modules/@nomiclabs/buidler-ethers/src/type-extensions.d.ts"
  • "node_modules/@nomiclabs/buidler-waffle/src/type-extensions.d.ts"
  1. Install these packages: npm install --save-dev @types/mocha @types/chai

We also recommend enabling resolveJsonModule in your tsconfig.json, as it's common to import JSON files directly when using Waffle.

There's no need to import the Waffle's solidity Chai matchers. They are automatically imported and initialized by this plugin, including its types.