Skip to main content

Execute Scripts

It is often the case that you need to query current state of the network. For example, to check balance of the account, read public value of the contract or ensure that user has specific resource in their storage.

We abstract this interaction into single method called executeScript. Method have 2 different signatures.

⚠️ Required: Your project must follow the required structure it must be initialized to use the following functions.

executeScript(props)

Provides explicit control over how you pass values.

Arguments

props object accepts following fields:

NameTypeOptionalDescription
codestringstring representation of Cadence script
namestringname of the file in scripts folder to use (sans .cdc extension)
args[any]an array of arguments to pass to script. Optional if script does not expect any arguments.
transformers[CadenceTransformer]an array of operators to modify the code, before submitting it to network

⚠️ Required: Either code or name field shall be specified. Method will throw an error if both of them are empty. If name field provided, framework will source code from file and override value passed via code field.

Returns

TypeDescription
ResponseObjectScript result

Usage


_29
import path from "path"
_29
import {init, emulator, executeScript} from "@onflow/flow-js-testing"
_29
_29
const main = async () => {
_29
const basePath = path.resolve(__dirname, "../cadence")
_29
_29
// Init framework
_29
init(basePath)
_29
// Start emulator
_29
await emulator.start()
_29
_29
// Define code and arguments we want to pass
_29
const code = `
_29
access(all) fun main(message: String): Int{
_29
log(message)
_29
_29
return 42
_29
}
_29
`
_29
const args = ["Hello, from Cadence"]
_29
_29
const [result, error, logs] = await executeScript({code, args})
_29
console.log({result}, {error}, {logs})
_29
_29
// Stop emulator instance
_29
await emulator.stop()
_29
}
_29
_29
main()

executeScript(name: string, args: [any])

This signature provides simplified way of executing a script, since most of the time you will utilize existing Cadence files.

Arguments

NameTypeOptionalDescription
namestringname of the file in scripts folder to use (sans .cdc extension)
args[any]an array of arguments to pass to script. Optional if scripts don't expect any arguments. Default: []

Returns

TypeDescription
ResponseObjectScript result

Usage


_22
import path from "path"
_22
import {init, emulator, executeScript} from "@onflow/flow-js-testing"
_22
_22
const main = async () => {
_22
const basePath = path.resolve(__dirname, "../cadence")
_22
_22
// Init framework
_22
init(basePath)
_22
// Start emulator
_22
await emulator.start()
_22
_22
// Define arguments we want to pass
_22
const args = ["Hello, from Cadence"]
_22
_22
// We assume there is a file `scripts/log-message.cdc` under base path
_22
const [result, error, logs] = await executeScript("log-message", args)
_22
console.log({result}, {error}, {logs})
_22
_22
await emulator.stop()
_22
}
_22
_22
main()