UNPKG

@ethereum-waffle/provider

Version:

A mock provider for your blockchain testing needs.

36 lines (29 loc) 1.17 kB
import {providers, Wallet} from 'ethers'; import {MockProvider} from './MockProvider'; export type Fixture<T> = (wallets: Wallet[], provider: MockProvider) => Promise<T>; interface Snapshot<T> { fixture: Fixture<T>; data: T; id: string; provider: providers.Web3Provider; wallets: Wallet[]; } export const loadFixture = createFixtureLoader(); export function createFixtureLoader(overrideWallets?: Wallet[], overrideProvider?: MockProvider) { const snapshots: Snapshot<any>[] = []; return async function load<T>(fixture: Fixture<T>): Promise<T> { const snapshot = snapshots.find((snapshot) => snapshot.fixture === fixture); if (snapshot) { await snapshot.provider.send('evm_revert', [snapshot.id]); snapshot.id = await snapshot.provider.send('evm_snapshot', []); return snapshot.data; } else { const provider = overrideProvider ?? new MockProvider(); const wallets = overrideWallets ?? provider.getWallets(); const data = await fixture(wallets, provider); const id = await provider.send('evm_snapshot', []); snapshots.push({fixture, data, id, provider, wallets}); return data; } }; }