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})