Test a Snap
You can test your Snap by hosting it locally using yarn start
, installing it in Flask, and calling
its API methods from a dapp.
For end-to-end Snap testing in a Jest environment, use the
@metamask/snaps-jest
package
as follows.
Steps
1. Install @metamask/snaps-jest
Install the @metamask/snaps-jest
package into your Snap project using Yarn
or npm:
yarn add -D @metamask/snaps-jest
or
npm i @metamask/snaps-jest
2. Configure @metamask/snaps-jest
The easiest way to configure this package is to add it to your Jest configuration as a preset.
In the jest.config.js
file, add the following:
module.exports = {
preset: "@metamask/snaps-jest",
};
This automatically configures Jest to use the @metamask/snaps-jest
environment, and to use the
@metamask/snaps-jest
matchers.
You can then run the jest
command as usual.
@metamask/snaps-jest
assumes the Snap is built in the directory you run Jest from.
If you use a different directory, you can specify the path using the
root
option, or by running your own HTTP server.
It's currently not possible to use @metamask/snaps-jest
with a Snap that is not built.
If you don't use the package as a preset, you can alternatively add the @metamask/snaps-jest
environment and matchers to your Jest configuration manually:
module.exports = {
testEnvironment: "@metamask/snaps-jest",
setupFilesAfterEnv: ["@metamask/snaps-jest/dist/cjs/setup.js"],
};
You can pass any Jest options to the test environment by adding a
testEnvironmentOptions
property to your Jest configuration.
For example:
module.exports = {
preset: "@metamask/snaps-jest",
testEnvironmentOptions: {
// Options go here.
},
};
All options are optional.
3. Use @metamask/snaps-jest
Use the package by calling any of the API methods. You can:
- Install a Snap.
- Send a transaction to the Snap.
- Run a cronjob in the Snap.
- Interact with user interfaces.
- Mock the response of a network request.
- Close the testing page.
You can also use Jest matchers to assert that a response from a Snap matches an expected value.