The Flow JS Testing Framework is essentially a set of helper methods. They can be used in an
opinionated way, envisioned by Flow Team. Or they can work as building blocks, allowing developers to build their own
testing solution as they see fit. Following methods used inside other framework methods, but we feel encouraged to list
them here as well.
getTemplate(file, addressMap, byAddress)
Returns Cadence template as string with addresses replaced using addressMap
Name | Type | Optional | Description |
---|
file | string | | relative (to the place from where the script was called) or absolute path to the file containing the code |
addressMap | AddressMap | ✅ | object to use for address mapping of existing deployed contracts. Default: {} |
byAddress | boolean | ✅ | whether addressMap is {name:address} or {address:address} type. Default: false |
Returns
Type | Description |
---|
string | content of a specified file |
Usage
_12import path from "path"
_12import {init, getTemplate} from "@onflow/flow-js-testing"
_12const main = async () => {
_12 const basePath = path.resolve(__dirname, "../cadence")
_12 const template = await getTemplate("../cadence/scripts/get-name.cdc")
_12 console.log({template})
getContractCode(name, addressMap)
Returns Cadence template from file with name
in _basepath_/contracts
folder
Arguments
Name | Type | Optional | Description |
---|
name | string | | name of the contract template |
addressMap | AddressMap | ✅ | object to use for address mapping of existing deployed contracts |
Returns
Type | Description |
---|
string | Cadence template code for specified contract |
Usage
_23import path from "path"
_23import {init, emulator, getContractCode} from "@onflow/flow-js-testing"
_23const main = async () => {
_23 const basePath = path.resolve(__dirname, "../cadence")
_23 await emulator.start()
_23 // Let's assume we need to import MessageContract
_23 await deployContractByName({name: "MessageContract"})
_23 const MessageContract = await getContractAddress("MessageContract")
_23 const addressMap = {MessageContract}
_23 const contractTemplate = await getContractCode("HelloWorld", {
_23 console.log({contractTemplate})
_23 await emulator.stop()
getTransactionCode(name, addressMap)
Returns Cadence template from file with name
in _basepath_/transactions
folder
Arguments
Name | Type | Optional | Description |
---|
name | string | | name of the transaction template |
addressMap | AddressMap | ✅ | object to use for address mapping of existing deployed contracts |
Returns
Type | Description |
---|
string | Cadence template code for specified transaction |
Usage
_24import path from "path"
_24import {init, emulator, getTransactionCode} from "@onflow/flow-js-testing"
_24const main = async () => {
_24 const basePath = path.resolve(__dirname, "../cadence")
_24 await emulator.start()
_24 // Let's assume we need to import MessageContract
_24 await deployContractByName({name: "MessageContract"})
_24 const MessageContract = await getContractAddress("MessageContract")
_24 const addressMap = {MessageContract}
_24 const txTemplate = await getTransactionCode({
_24 console.log({txTemplate})
_24 await emulator.stop()
getScriptCode(name, addressMap)
Returns Cadence template from file with name
in _basepath_/scripts
folder
Arguments
Name | Type | Optional | Description |
---|
name | string | | name of the script template |
addressMap | AddressMap | ✅ | object to use for address mapping of existing deployed contracts |
Returns
Type | Description |
---|
string | Cadence template code for specified script |
Usage
_24import path from "path"
_24import {init, emulator, getScriptCode} from "@onflow/flow-js-testing"
_24const main = async () => {
_24 const basePath = path.resolve(__dirname, "../cadence")
_24 await emulator.start()
_24 // Let's assume we need to import MessageContract
_24 await deployContractByName({name: "MessageContract"})
_24 const MessageContract = await getContractAddress("MessageContract")
_24 const addressMap = {MessageContract}
_24 const scriptTemplate = await getScriptCode({
_24 console.log({scriptTemplate})
_24 await emulator.stop()
Examples
If you don't have any contract dependencies, you can use those methods without specifying address map as second parameter.
_19import path from "path"
_19} from "@onflow/flow-js-testing"
_19const main = async () => {
_19 const basePath = path.resolve(__dirname, "../cadence")
_19 const contractWallet = await getContractCode({name: "Wallet"})
_19 const txGetCapability = await getTransactionCode({name: "get-capability"})
_19 const scriptGetBalance = await getScriptCode({name: "get-balance"})
_19 console.log({contractWallet, txGetCapability, scriptGetBalance})