PocketIc
Defined in: packages/pic/src/pocket-ic.ts:139
This class represents the main PocketIC client. It is responsible for interacting with the PocketIC server via the REST API. See PocketIcServer for details on the server to use with this client.
Example
Section titled “Example”The easist way to use PocketIC is to use setupCanister convenience method:
import { PocketIc, PocketIcServer } from '@dfinity/pic';import { _SERVICE, idlFactory } from '../declarations';
const wasmPath = resolve('..', '..', 'canister.wasm');
const picServer = await PocketIcServer.start();const pic = await PocketIc.create(picServer.getUrl());
const fixture = await pic.setupCanister<_SERVICE>({ idlFactory, wasmPath });const { actor } = fixture;
// perform tests...
await pic.tearDown();await picServer.stop();If more control is needed, then the createCanister, installCode and createActor methods can be used directly:
import { PocketIc, PocketIcServer } from '@dfinity/pic';import { _SERVICE, idlFactory } from '../declarations';
const wasm = resolve('..', '..', 'canister.wasm');
const picServer = await PocketIcServer.start();const pic = await PocketIc.create(picServer.getUrl());
const canisterId = await pic.createCanister();await pic.installCode({ canisterId, wasm });const actor = pic.createActor<_SERVICE>({ idlFactory, canisterId });
// perform tests...
await pic.tearDown();await picServer.stop();Methods
Section titled “Methods”addCycles()
Section titled “addCycles()”addCycles(
canisterId,amount):Promise<bigint>
Defined in: packages/pic/src/pocket-ic.ts:1870
Add cycles to the specified canister.
Parameters
Section titled “Parameters”canisterId
Section titled “canisterId”Principal
The Principal of the canister to add cycles to.
amount
Section titled “amount”bigint
The amount of cycles to add.
Returns
Section titled “Returns”Promise<bigint>
The new cycle balance of the canister.
Example
Section titled “Example”import { Principal } from '@icp-sdk/core/principal';import { PocketIc, PocketIcServer } from '@dfinity/pic';
const canisterId = Principal.fromUint8Array(new Uint8Array([0]));
const picServer = await PocketIcServer.start();const pic = await PocketIc.create(picServer.getUrl());
const newCyclesBalance = await pic.addCycles(canisterId, BigInt(10_000_000));
await pic.tearDown();await picServer.stop();advanceCertifiedTime()
Section titled “advanceCertifiedTime()”advanceCertifiedTime(
duration):Promise<void>
Defined in: packages/pic/src/pocket-ic.ts:1560
Advance the time of the IC by the given duration in milliseconds and immediately have query calls and read state requests reflect the new time.
Use advanceTime to advance time without immediately reflecting the new time.
Parameters
Section titled “Parameters”duration
Section titled “duration”number
The duration to advance the time by.
Returns
Section titled “Returns”Promise<void>
Example
Section titled “Example”import { PocketIc, PocketIcServer } from '@dfinity/pic';
const picServer = await PocketIcServer.start();const pic = await PocketIc.create(picServer.getUrl());
const initialTime = await pic.getTime();await pic.advanceCertifiedTime(1_000);
const newTime = await pic.getTime();
await pic.tearDown();await picServer.stop();advanceTime()
Section titled “advanceTime()”advanceTime(
duration):Promise<void>
Defined in: packages/pic/src/pocket-ic.ts:1529
Advance the time of the IC by the given duration in milliseconds. tick should be called after calling this method in order for query calls and read state requests to reflect the new time.
Use advanceCertifiedTime to advance time and immediately have query calls and read state requests reflect the new time.
Parameters
Section titled “Parameters”duration
Section titled “duration”number
The duration to advance the time by.
Returns
Section titled “Returns”Promise<void>
Example
Section titled “Example”import { PocketIc, PocketIcServer } from '@dfinity/pic';
const picServer = await PocketIcServer.start();const pic = await PocketIc.create(picServer.getUrl());
const initialTime = await pic.getTime();await pic.advanceTime(1_000);await pic.tick();
const newTime = await pic.getTime();
await pic.tearDown();await picServer.stop();awaitCall()
Section titled “awaitCall()”awaitCall(
call):Promise<Uint8Array<ArrayBufferLike>>
Defined in: packages/pic/src/pocket-ic.ts:1251
Executes rounds until the given call has finished, see submitCall.
Parameters
Section titled “Parameters”The submitted call, see SubmittedCall.
Returns
Section titled “Returns”Promise<Uint8Array<ArrayBufferLike>>
The Candid-encoded response of the update call. Throws if the call was rejected.
canisterExists()
Section titled “canisterExists()”canisterExists(
canisterId):Promise<boolean>
Defined in: packages/pic/src/pocket-ic.ts:1655
Checks whether the given canister exists.
Parameters
Section titled “Parameters”canisterId
Section titled “canisterId”Principal
The Principal of the canister to check.
Returns
Section titled “Returns”Promise<boolean>
true if the canister exists, false otherwise.
canisterStatus()
Section titled “canisterStatus()”canisterStatus(
options):Promise<CanisterStatusResult>
Defined in: packages/pic/src/pocket-ic.ts:714
Returns the status of the given canister.
Parameters
Section titled “Parameters”options
Section titled “options”Options for querying the canister status, see CanisterStatusOptions.
Returns
Section titled “Returns”Promise<CanisterStatusResult>
The canister status, see CanisterStatusResult.
Example
Section titled “Example”import { Principal } from '@icp-sdk/core/principal';import { PocketIc, PocketIcServer } from '@dfinity/pic';
const canisterId = Principal.fromUint8Array(new Uint8Array([0]));
const picServer = await PocketIcServer.start();const pic = await PocketIc.create(picServer.getUrl());
const status = await pic.canisterStatus({ canisterId });
await pic.tearDown();await picServer.stop();createActor()
Section titled “createActor()”createActor<
T>(options):Actor<T>
Defined in: packages/pic/src/pocket-ic.ts:973
Creates an Actor for the given canister. An Actor is a typesafe class that implements the Candid interface of a canister. To create a canister for the Actor, see createCanister. For a more convenient way of creating a PocketIC instance, creating a canister and installing code, see setupCanister.
Type Parameters
Section titled “Type Parameters”T extends ActorInterface<T> = object
The type of the Actor. Must implement ActorInterface.
Parameters
Section titled “Parameters”options
Section titled “options”Options for creating the Actor, see CreateActorOptions.
Returns
Section titled “Returns”Actor<T>
The Actor instance.
Example
Section titled “Example”import { resolve } from 'node:path';import { PocketIc, PocketIcServer, generateRandomIdentity } from '@dfinity/pic';import { _SERVICE, idlFactory } from '../declarations/backend.did';
const wasm = resolve('..', '..', 'canister.wasm');const alice = generateRandomIdentity();
const picServer = await PocketIcServer.start();const pic = await PocketIc.create(picServer.getUrl());
const canisterId = await pic.createCanister();await pic.installCode({ canisterId, wasm });const actor = pic.createActor<_SERVICE>({ idlFactory, canisterId, sender: alice.getPrincipal(),});
await pic.tearDown();await picServer.stop();createCanister()
Section titled “createCanister()”createCanister(
options?):Promise<Principal>
Defined in: packages/pic/src/pocket-ic.ts:249
Creates a new canister. For a more convenient way of creating a PocketIC instance, creating a canister and installing code, see setupCanister.
Parameters
Section titled “Parameters”options?
Section titled “options?”Options for creating the canister, see CreateCanisterOptions.
Returns
Section titled “Returns”Promise<Principal>
The Principal of the newly created canister.
Example
Section titled “Example”import { PocketIc, PocketIcServer } from '@dfinity/pic';
const picServer = await PocketIcServer.start();const pic = await PocketIc.create(picServer.getUrl());
const canisterId = await pic.createCanister();
await pic.tearDown();await picServer.stop();createDeferredActor()
Section titled “createDeferredActor()”createDeferredActor<
T>(options):DeferredActor<T>
Defined in: packages/pic/src/pocket-ic.ts:1016
Creates a DeferredActor for the given canister. A DeferredActor is a typesafe class that implements the Candid interface of a canister.
A DeferredActor in contrast to a normal Actor will submit the call to the PocketIc replica,
but the call will not be executed immediately. Instead, the calls are queued and a Promise is returned
by the DeferredActor that can be awaited to process the pending canister call.
To create a canister for the DeferredActor, see createCanister. For a more convenient way of creating a PocketIC instance, creating a canister and installing code, see setupCanister.
Type Parameters
Section titled “Type Parameters”T extends ActorInterface<T> = object
The type of the DeferredActor. Must implement ActorInterface.
Parameters
Section titled “Parameters”options
Section titled “options”Options for creating the DeferredActor, see CreateActorOptions.
Returns
Section titled “Returns”The DeferredActor instance.
Example
Section titled “Example”const deferredActor = pic.createDeferredActor<_SERVICE>({ idlFactory, canisterId,});
const executeCall = await deferredActor.greet('PicJS');// other calls or ticks...const response = await executeCall();deleteCanister()
Section titled “deleteCanister()”deleteCanister(
options):Promise<void>
Defined in: packages/pic/src/pocket-ic.ts:383
Deletes the given canister. The canister must be stopped first, see stopCanister.
Parameters
Section titled “Parameters”options
Section titled “options”Options for deleting the canister, see DeleteCanisterOptions.
Returns
Section titled “Returns”Promise<void>
Example
Section titled “Example”await pic.stopCanister({ canisterId, sender });await pic.deleteCanister({ canisterId, sender });
const exists = await pic.canisterExists(canisterId); // falsedeleteCanisterSnapshot()
Section titled “deleteCanisterSnapshot()”deleteCanisterSnapshot(
options):Promise<void>
Defined in: packages/pic/src/pocket-ic.ts:878
Deletes a snapshot of the given canister.
Parameters
Section titled “Parameters”options
Section titled “options”Options for deleting the snapshot, see CanisterSnapshotOptions.
Returns
Section titled “Returns”Promise<void>
downloadCanisterSnapshot()
Section titled “downloadCanisterSnapshot()”downloadCanisterSnapshot(
options):Promise<void>
Defined in: packages/pic/src/pocket-ic.ts:902
Downloads a snapshot of the given canister to a directory on the machine running the PocketIC server, e.g. to reuse a canister’s state across test runs. Upload it again with uploadCanisterSnapshot.
Parameters
Section titled “Parameters”options
Section titled “options”DownloadCanisterSnapshotOptions
Options for downloading the snapshot, see DownloadCanisterSnapshotOptions.
Returns
Section titled “Returns”Promise<void>
fetchCanisterLogs()
Section titled “fetchCanisterLogs()”fetchCanisterLogs(
options):Promise<CanisterLogRecord[]>
Defined in: packages/pic/src/pocket-ic.ts:1123
Fetches the log records of the given canister, e.g. to inspect traps in timers or heartbeats. Only controllers can read a canister’s logs unless its log visibility allows otherwise, see FetchCanisterLogsOptions.sender.
Parameters
Section titled “Parameters”options
Section titled “options”Options for fetching canister logs, see FetchCanisterLogsOptions.
Returns
Section titled “Returns”Promise<CanisterLogRecord[]>
The canister’s log records, see CanisterLogRecord.
Example
Section titled “Example”import { PocketIc, PocketIcServer, generateRandomIdentity } from '@dfinity/pic';
const controller = generateRandomIdentity();
const picServer = await PocketIcServer.start();const pic = await PocketIc.create(picServer.getUrl());
const canisterId = await pic.createCanister({ sender: controller.getPrincipal(), controllers: [controller.getPrincipal()],});// install and call the canister...
const logs = await pic.fetchCanisterLogs({ canisterId, sender: controller.getPrincipal(),});const messages = logs.map(log => new TextDecoder().decode(log.content));
await pic.tearDown();await picServer.stop();getApplicationSubnets()
Section titled “getApplicationSubnets()”getApplicationSubnets():
Promise<SubnetTopology[]>
Defined in: packages/pic/src/pocket-ic.ts:1796
Get all application subnet topologies for this instance’s network. The instance network topology is configured via the create method.
Returns
Section titled “Returns”Promise<SubnetTopology[]>
An array of subnet topologies for each application subnet that exists on this instance’s network.
getBitcoinSubnet()
Section titled “getBitcoinSubnet()”getBitcoinSubnet():
Promise<SubnetTopology|undefined>
Defined in: packages/pic/src/pocket-ic.ts:1712
Get the Bitcoin subnet topology for this instance’s network. The instance network topology is configured via the create method.
Returns
Section titled “Returns”Promise<SubnetTopology | undefined>
The subnet topology for the Bitcoin subnet, if it exists on this instance’s network.
getCanisterSubnetId()
Section titled “getCanisterSubnetId()”getCanisterSubnetId(
canisterId):Promise<Principal|null>
Defined in: packages/pic/src/pocket-ic.ts:1639
Gets the subnet Id of the provided canister Id.
Parameters
Section titled “Parameters”canisterId
Section titled “canisterId”Principal
The Principal of the canister to get the subnet Id of.
Returns
Section titled “Returns”Promise<Principal | null>
The canister’s subnet Id if the canister exists, null otherwise.
Example
Section titled “Example”import { PocketIc, PocketIcServer } from '@dfinity/pic';
const canisterId = Principal.fromUint8Array(new Uint8Array([0]));
const picServer = await PocketIcServer.start();const pic = await PocketIc.create(picServer.getUrl());
const subnetId = await pic.getCanisterSubnetId(canisterId);
await pic.tearDown();await picServer.stop();getControllers()
Section titled “getControllers()”getControllers(
canisterId):Promise<Principal[]>
Defined in: packages/pic/src/pocket-ic.ts:1343
Get the controllers of the specified canister.
Parameters
Section titled “Parameters”canisterId
Section titled “canisterId”Principal
The Principal of the canister to get the controllers of.
Returns
Section titled “Returns”Promise<Principal[]>
The controllers of the specified canister.
Example
Section titled “Example”import { Principal } from '@icp-sdk/core/principal';
const canisterId = Principal.fromUint8Array(new Uint8Array([0]));
const picServer = await PocketIcServer.start();const pic = await PocketIc.create(picServer.getUrl());
const controllers = await pic.getControllers(canisterId);
await pic.tearDown();await picServer.stop();getCyclesBalance()
Section titled “getCyclesBalance()”getCyclesBalance(
canisterId):Promise<bigint>
Defined in: packages/pic/src/pocket-ic.ts:1839
Gets the current cycle balance of the specified canister.
Parameters
Section titled “Parameters”canisterId
Section titled “canisterId”Principal
The Principal of the canister to check.
Returns
Section titled “Returns”Promise<bigint>
The current cycles balance of the canister.
Example
Section titled “Example”import { Principal } from '@icp-sdk/core/principal';import { PocketIc, PocketIcServer } from '@dfinity/pic';
const canisterId = Principal.fromUint8Array(new Uint8Array([0]));
const picServer = await PocketIcServer.start();const pic = await PocketIc.create(picServer.getUrl());
const cyclesBalance = await pic.getCyclesBalance(canisterId);
await pic.tearDown();await picServer.stop();getDefaultEffectiveCanisterId()
Section titled “getDefaultEffectiveCanisterId()”getDefaultEffectiveCanisterId():
Promise<Principal>
Defined in: packages/pic/src/pocket-ic.ts:1701
Get the default effective canister id for this PocketIC instance.
This is useful when calling IcManagementCanister.provisionalCreateCanisterWithCycles
on the management canister from @icp-sdk/canisters/ic-management.
Returns
Section titled “Returns”Promise<Principal>
The default effective canister id.
Example
Section titled “Example”import { PocketIc, PocketIcServer } from '@dfinity/pic';import { IcManagementCanister } from '@icp-sdk/canisters/ic-management';
const picServer = await PocketIcServer.start();const pic = await PocketIc.create(picServer.getUrl());
const defaultEffectiveCanisterId = await pic.getDefaultEffectiveCanisterId();
const managementCanister = IcManagementCanister.create({ agent });const canisterId = await managementCanister.provisionalCreateCanisterWithCycles({ canisterId: defaultEffectiveCanisterId,});
await pic.tearDown();await picServer.stop();getFiduciarySubnet()
Section titled “getFiduciarySubnet()”getFiduciarySubnet():
Promise<SubnetTopology|undefined>
Defined in: packages/pic/src/pocket-ic.ts:1725
Get the Fiduciary subnet topology for this instance’s network. The instance network topology is configured via the create method.
Returns
Section titled “Returns”Promise<SubnetTopology | undefined>
The subnet topology for the Fiduciary subnet, if it exists on this instance’s network.
getInternetIdentitySubnet()
Section titled “getInternetIdentitySubnet()”getInternetIdentitySubnet():
Promise<SubnetTopology|undefined>
Defined in: packages/pic/src/pocket-ic.ts:1755
Get the Internet Identity subnet topology for this instance’s network. The instance network topology is configured via the create method.
Returns
Section titled “Returns”Promise<SubnetTopology | undefined>
The subnet topology for the Internet Identity subnet, if it exists on this instance’s network.
getNnsSubnet()
Section titled “getNnsSubnet()”getNnsSubnet():
Promise<SubnetTopology|undefined>
Defined in: packages/pic/src/pocket-ic.ts:1770
Get the NNS subnet topology for this instance’s network. The instance network topology is configured via the create method.
Returns
Section titled “Returns”Promise<SubnetTopology | undefined>
The subnet topology for the NNS subnet, if it exists on this instance’s network.
getPendingHttpsOutcalls()
Section titled “getPendingHttpsOutcalls()”getPendingHttpsOutcalls():
Promise<PendingHttpsOutcall[]>
Defined in: packages/pic/src/pocket-ic.ts:1993
Get all pending HTTPS Outcalls across all subnets on this PocketIC instance.
Returns
Section titled “Returns”Promise<PendingHttpsOutcall[]>
An array of pending HTTPS Outcalls.
Example
Section titled “Example”import { Principal } from '@icp-sdk/core/principal';import { PocketIc, PocketIcServer } from '@dfinity/pic';
const canisterId = Principal.fromUint8Array(new Uint8Array([0]));
const picServer = await PocketIcServer.start();const pic = await PocketIc.create(picServer.getUrl());
// queue the canister message that will send the HTTPS Outcallconst executeGoogleSearch = await deferredActor.google_search();
// tick for two rounds to allow the canister message to be processed// and for the HTTPS Outcall to be queuedawait pic.tick(2);
// get all queued HTTPS Outcallsconst pendingHttpsOutcalls = await pic.getPendingHttpsOutcalls();
// get the first pending HTTPS Outcallconst pendingGoogleSearchOutcall = pendingHttpsOutcalls[0];
// mock the HTTPS Outcallawait pic.mockPendingHttpsOutcall({ requestId: pendingGoogleSearchOutcall.requestId, subnetId: pendingGoogleSearchOutcall.subnetId, response: { type: 'success', body: new TextEncoder().encode('Google search result'), statusCode: 200, headers: [], },});
// finish executing the message, including the HTTPS Outcallconst result = await executeGoogleSearch();
await pic.tearDown();await picServer.stop();getPubKey()
Section titled “getPubKey()”getPubKey(
subnetId):Promise<Uint8Array<ArrayBufferLike>>
Defined in: packages/pic/src/pocket-ic.ts:1587
Fetch the public key of the specified subnet.
Parameters
Section titled “Parameters”subnetId
Section titled “subnetId”Principal
The Principal of the subnet to fetch the public key of.
Returns
Section titled “Returns”Promise<Uint8Array<ArrayBufferLike>>
The public key of the specified subnet.
Example
Section titled “Example”import { PocketIc, PocketIcServer } from '@dfinity/pic';
const picServer = await PocketIcServer.start();const pic = await PocketIc.create(picServer.getUrl());
const subnets = pic.getApplicationSubnets();const pubKey = await pic.getPubKey(subnets[0].id);
await pic.tearDown();await picServer.stop();getSnsSubnet()
Section titled “getSnsSubnet()”getSnsSubnet():
Promise<SubnetTopology|undefined>
Defined in: packages/pic/src/pocket-ic.ts:1783
Get the SNS subnet topology for this instance’s network. The instance network topology is configured via the create method.
Returns
Section titled “Returns”Promise<SubnetTopology | undefined>
The subnet topology for the SNS subnet, if it exists on this instance’s network.
getStableMemory()
Section titled “getStableMemory()”getStableMemory(
canisterId):Promise<Uint8Array<ArrayBufferLike>>
Defined in: packages/pic/src/pocket-ic.ts:1939
Get the stable memory of a given canister.
Parameters
Section titled “Parameters”canisterId
Section titled “canisterId”Principal
The Principal of the canister to get the stable memory of.
Returns
Section titled “Returns”Promise<Uint8Array<ArrayBufferLike>>
A blob containing the canister’s stable memory.
Example
Section titled “Example”import { Principal } from '@icp-sdk/core/principal';import { PocketIc, PocketIcServer } from '@dfinity/pic';
const canisterId = Principal.fromUint8Array(new Uint8Array([0]));
const picServer = await PocketIcServer.start();const pic = await PocketIc.create(picServer.getUrl());
const stableMemory = await pic.getStableMemory(canisterId);
await pic.tearDown();await picServer.stop();getSystemSubnets()
Section titled “getSystemSubnets()”getSystemSubnets():
Promise<SubnetTopology[]>
Defined in: packages/pic/src/pocket-ic.ts:1809
Get all system subnet topologies for this instance’s network. The instance network topology is configured via the create method.
Returns
Section titled “Returns”Promise<SubnetTopology[]>
An array of subnet topologies for each system subnet that exists on this instance’s network.
getTestThresholdKeysSubnet()
Section titled “getTestThresholdKeysSubnet()”getTestThresholdKeysSubnet():
Promise<SubnetTopology|undefined>
Defined in: packages/pic/src/pocket-ic.ts:1738
Get the test threshold keys subnet topology for this instance’s network. The instance network topology is configured via the create method.
Returns
Section titled “Returns”Promise<SubnetTopology | undefined>
The subnet topology for the test threshold keys subnet, if it exists on this instance’s network.
getTime()
Section titled “getTime()”getTime():
Promise<number>
Defined in: packages/pic/src/pocket-ic.ts:1365
Get the current time of the IC in milliseconds since the Unix epoch.
Returns
Section titled “Returns”Promise<number>
The current time in milliseconds since the UNIX epoch.
Example
Section titled “Example”import { PocketIc, PocketIcServer } from '@dfinity/pic';
const picServer = await PocketIcServer.start();const pic = await PocketIc.create(picServer.getUrl());
const time = await pic.getTime();
await pic.tearDown();await picServer.stop();getTopology()
Section titled “getTopology()”getTopology():
Promise<SubnetTopology[]>
Defined in: packages/pic/src/pocket-ic.ts:1667
Get the topology of this instance’s network. The topology is a list of subnets, each with a type and a list of canister ID ranges that can be deployed to that subnet. The instance network topology is configured via the create method.
Returns
Section titled “Returns”Promise<SubnetTopology[]>
An array of subnet topologies, see SubnetTopology.
ingressStatus()
Section titled “ingressStatus()”ingressStatus(
call,options?):Promise<Uint8Array<ArrayBufferLike> |null>
Defined in: packages/pic/src/pocket-ic.ts:1266
Fetches the status of the given call without executing any rounds, see submitCall.
Parameters
Section titled “Parameters”The submitted call, see SubmittedCall.
options?
Section titled “options?”IngressStatusOptions = {}
Options for fetching the status, see IngressStatusOptions.
Returns
Section titled “Returns”Promise<Uint8Array<ArrayBufferLike> | null>
The Candid-encoded response of the update call if it has finished,
null otherwise. Throws if the call was rejected.
installCode()
Section titled “installCode()”installCode(
options):Promise<void>
Defined in: packages/pic/src/pocket-ic.ts:471
Installs the given WASM module to the provided canister. To create a canister to install code to, see createCanister. For a more convenient way of creating a PocketIC instance, creating a canister and installing code, see setupCanister.
Parameters
Section titled “Parameters”options
Section titled “options”Options for installing the code, see InstallCodeOptions.
Returns
Section titled “Returns”Promise<void>
Example
Section titled “Example”import { Principal } from '@icp-sdk/core/principal';import { PocketIc, PocketIcServer } from '@dfinity/pic';import { resolve } from 'node:path';
const canisterId = Principal.fromUint8Array(new Uint8Array([0]));const wasm = resolve('..', '..', 'canister.wasm');
const picServer = await PocketIcServer.start();const pic = await PocketIc.create(picServer.getUrl());
await pic.installCode({ canisterId, wasm });
await pic.tearDown();await picServer.stop();listCanisterSnapshots()
Section titled “listCanisterSnapshots()”listCanisterSnapshots(
options):Promise<CanisterSnapshot[]>
Defined in: packages/pic/src/pocket-ic.ts:856
Lists the snapshots of the given canister.
Parameters
Section titled “Parameters”options
Section titled “options”Options for listing the snapshots, see ListCanisterSnapshotsOptions.
Returns
Section titled “Returns”Promise<CanisterSnapshot[]>
The snapshots, see CanisterSnapshot.
loadCanisterSnapshot()
Section titled “loadCanisterSnapshot()”loadCanisterSnapshot(
options):Promise<void>
Defined in: packages/pic/src/pocket-ic.ts:832
Restores the given canister from one of its snapshots, see takeCanisterSnapshot.
Parameters
Section titled “Parameters”options
Section titled “options”Options for loading the snapshot, see CanisterSnapshotOptions.
Returns
Section titled “Returns”Promise<void>
makeLive()
Section titled “makeLive()”makeLive(
options?):Promise<number>
Defined in: packages/pic/src/pocket-ic.ts:2093
Make the PocketIC instance live by enabling auto progress and starting an HTTP gateway. If the instance was created with CreateInstanceOptions.httpGateway, that gateway is used instead. If the instance is already live, this method returns the port of its HTTP gateway, starting one first if the instance was created live with CreateInstanceOptions.autoProgress.
Parameters
Section titled “Parameters”options?
Section titled “options?”MakeLiveOptions = {}
Options for making the instance live, see MakeLiveOptions. To change them on a live instance, call stopLive first.
Returns
Section titled “Returns”Promise<number>
The HTTP Gateway port.
Example
Section titled “Example”import { Actor, HttpAgent } from '@icp-sdk/core/agent';import { PocketIc, PocketIcServer } from '@dfinity/pic';import { resolve } from 'node:path';import { idlFactory } from '../declarations';
const wasm = resolve('..', '..', 'canister.wasm');
const picServer = await PocketIcServer.start();const pic = await PocketIc.create(picServer.getUrl());const { canisterId } = await pic.setupCanister({ idlFactory, wasm });
const httpGatewayPort = await pic.makeLive({ artificialDelayMs: 500 });const agent = await HttpAgent.create({ host: `http://localhost:${httpGatewayPort}`, shouldFetchRootKey: true,});const actor = Actor.createActor(idlFactory, { agent, canisterId });
await pic.stopLive();await pic.tearDown();await picServer.stop();mockPendingHttpsOutcall()
Section titled “mockPendingHttpsOutcall()”mockPendingHttpsOutcall(
options):Promise<void>
Defined in: packages/pic/src/pocket-ic.ts:2044
Mock a pending HTTPS Outcall.
Parameters
Section titled “Parameters”options
Section titled “options”MockPendingHttpsOutcallOptions
Options for mocking the pending HTTPS Outcall, see MockPendingHttpsOutcallOptions.
Returns
Section titled “Returns”Promise<void>
Example
Section titled “Example”import { Principal } from '@icp-sdk/core/principal';import { PocketIc, PocketIcServer } from '@dfinity/pic';
const canisterId = Principal.fromUint8Array(new Uint8Array([0]));
const picServer = await PocketIcServer.start();const pic = await PocketIc.create(picServer.getUrl());
// queue the canister message that will send the HTTPS Outcallconst executeGoogleSearch = await deferredActor.google_search();
// tick for two rounds to allow the canister message to be processed// and for the HTTPS Outcall to be queuedawait pic.tick(2);
// get all queued HTTPS Outcallsconst pendingHttpsOutcalls = await pic.getPendingHttpsOutcalls();
// get the first pending HTTPS Outcallconst pendingGoogleSearchOutcall = pendingHttpsOutcalls[0];
// mock the HTTPS Outcallawait pic.mockPendingHttpsOutcall({ requestId: pendingGoogleSearchOutcall.requestId, subnetId: pendingGoogleSearchOutcall.subnetId, response: { type: 'success', body: new TextEncoder().encode('Google search result'), statusCode: 200, headers: [], },});
// finish executing the message, including the HTTPS Outcallconst result = await executeGoogleSearch();
await pic.tearDown();await picServer.stop();queryCall()
Section titled “queryCall()”queryCall(
options):Promise<Uint8Array<ArrayBufferLike>>
Defined in: packages/pic/src/pocket-ic.ts:1066
Makes a query call to the given canister.
Parameters
Section titled “Parameters”options
Section titled “options”Options for making the query call, see QueryCallOptions.
Returns
Section titled “Returns”Promise<Uint8Array<ArrayBufferLike>>
The Candid-encoded response of the query call.
Example
Section titled “Example”import { Principal } from '@icp-sdk/core/principal';import { PocketIc, PocketIcServer } from '@dfinity/pic';import { _SERVICE, idlFactory } from '../declarations';
const wasm = resolve('..', '..', 'canister.wasm');
const picServer = await PocketIcServer.start();const pic = await PocketIc.create(picServer.getUrl());
canisterId = await pic.createCanister({ sender: controllerIdentity.getPrincipal(),});await pic.installCode({ canisterId, wasm });
const res = await pic.queryCall({ canisterId, method: 'greet',});
await pic.tearDown();await picServer.stop();reinstallCode()
Section titled “reinstallCode()”reinstallCode(
options):Promise<void>
Defined in: packages/pic/src/pocket-ic.ts:543
Reinstalls the given WASM module to the provided canister. This will reset both the canister’s heap and its stable memory. To create a canister to upgrade, see createCanister. To install the initial WASM module to a new canister, see installCode.
Parameters
Section titled “Parameters”options
Section titled “options”Options for reinstalling the code, see ReinstallCodeOptions.
Returns
Section titled “Returns”Promise<void>
Example
Section titled “Example”import { Principal } from '@icp-sdk/core/principal';import { PocketIc, PocketIcServer } from '@dfinity/pic';import { resolve } from 'node:path';
const canisterId = Principal.fromUint8Array(new Uint8Array([0]));const wasm = resolve('..', '..', 'canister.wasm');
const picServer = await PocketIcServer.start();const pic = await PocketIc.create(picServer.getUrl());
await pic.reinstallCode({ canisterId, wasm });
await pic.tearDown();await picServer.stop();resetCertifiedTime()
Section titled “resetCertifiedTime()”resetCertifiedTime():
Promise<void>
Defined in: packages/pic/src/pocket-ic.ts:1420
Reset the time of the IC to the current time and immediately have query calls and read state requests reflect the new time.
Use resetTime to reset time without immediately reflecting the new time.
Returns
Section titled “Returns”Promise<void>
Example
Section titled “Example”import { PocketIc, PocketIcServer } from '@dfinity/pic';
const picServer = await PocketIcServer.start();const pic = await PocketIc.create(picServer.getUrl());
await pic.resetCertifiedTime();
const time = await pic.getTime();
await pic.tearDown();await picServer.stop();resetTime()
Section titled “resetTime()”resetTime():
Promise<void>
Defined in: packages/pic/src/pocket-ic.ts:1395
Reset the time of the IC to the current time. tick should be called after calling this method in order for query calls and read state request to reflect the new time.
Use resetCertifiedTime to set time and immediately have query calls and read state requests reflect the new time.
Returns
Section titled “Returns”Promise<void>
Example
Section titled “Example”import { PocketIc, PocketIcServer } from '@dfinity/pic';
const picServer = await PocketIcServer.start();const pic = await PocketIc.create(picServer.getUrl());
await pic.resetTime();await pic.tick();
const time = await pic.getTime();
await pic.tearDown();await picServer.stop();setCertifiedTime()
Section titled “setCertifiedTime()”setCertifiedTime(
time):Promise<void>
Defined in: packages/pic/src/pocket-ic.ts:1494
Set the current time of the IC and immediately have query calls and read state requests reflect the new time.
Use setTime to set time without immediately reflecting the new time.
Parameters
Section titled “Parameters”The time to set in milliseconds since the Unix epoch.
number | Date
Returns
Section titled “Returns”Promise<void>
Example
Section titled “Example”import { PocketIc, PocketIcServer } from '@dfinity/pic';
const pic = await PocketIc.create();
const date = new Date();
const picServer = await PocketIcServer.start();const pic = await PocketIc.create(picServer.getUrl());
await pic.setCertifiedTime(date);// orawait pic.setCertifiedTime(date.getTime());
const time = await pic.getTime();
await pic.tearDown();await picServer.stop();setStableMemory()
Section titled “setStableMemory()”setStableMemory(
canisterId,stableMemory):Promise<void>
Defined in: packages/pic/src/pocket-ic.ts:1904
Set the stable memory of a given canister.
Parameters
Section titled “Parameters”canisterId
Section titled “canisterId”Principal
The Principal of the canister to set the stable memory of.
stableMemory
Section titled “stableMemory”Uint8Array
A blob containing the stable memory to set.
Returns
Section titled “Returns”Promise<void>
Example
Section titled “Example”import { Principal } from '@icp-sdk/core/principal';import { PocketIc, PocketIcServer } from '@dfinity/pic';
const canisterId = Principal.fromUint8Array(new Uint8Array([0]));const stableMemory = new Uint8Array([0, 1, 2, 3, 4]);
const picServer = await PocketIcServer.start();const pic = await PocketIc.create(picServer.getUrl());
await pic.setStableMemory(canisterId, stableMemory);
await pic.tearDown();await picServer.stop();setTime()
Section titled “setTime()”setTime(
time):Promise<void>
Defined in: packages/pic/src/pocket-ic.ts:1457
Set the current time of the IC. tick should be called after calling this method in order for query calls and read state request to reflect the new time.
Use setCertifiedTime to set time and immediately have query calls and read state requests reflect the new time.
Parameters
Section titled “Parameters”The time to set in milliseconds since the Unix epoch.
number | Date
Returns
Section titled “Returns”Promise<void>
Example
Section titled “Example”import { PocketIc, PocketIcServer } from '@dfinity/pic';
const pic = await PocketIc.create();
const date = new Date();
const picServer = await PocketIcServer.start();const pic = await PocketIc.create(picServer.getUrl());
await pic.setTime(date);// orawait pic.setTime(date.getTime());
await pic.tick();
const time = await pic.getTime();
await pic.tearDown();await picServer.stop();setupCanister()
Section titled “setupCanister()”setupCanister<
T>(options):Promise<CanisterFixture<T>>
Defined in: packages/pic/src/pocket-ic.ts:205
A convenience method that creates a new canister, installs the given WASM module to it and returns a typesafe Actor that implements the Candid interface of the canister. To just create a canister, see createCanister. To just install code to an existing canister, see installCode. To just create an Actor for an existing canister, see createActor.
Type Parameters
Section titled “Type Parameters”T extends ActorInterface<T> = object
Parameters
Section titled “Parameters”options
Section titled “options”Options for setting up the canister, see SetupCanisterOptions.
Returns
Section titled “Returns”Promise<CanisterFixture<T>>
The Actor instance.
Example
Section titled “Example”import { PocketIc, PocketIcServer } from '@dfinity/pic';import { _SERVICE, idlFactory } from '../declarations';
const wasmPath = resolve('..', '..', 'canister.wasm');
const picServer = await PocketIcServer.start();const pic = await PocketIc.create(picServer.getUrl());
const fixture = await pic.setupCanister<_SERVICE>({ idlFactory, wasmPath });const { actor } = fixture;
await pic.tearDown();await picServer.stop();startCanister()
Section titled “startCanister()”startCanister(
options):Promise<void>
Defined in: packages/pic/src/pocket-ic.ts:300
Starts the given canister.
Parameters
Section titled “Parameters”options
Section titled “options”Options for starting the canister, see StartCanisterOptions.
Returns
Section titled “Returns”Promise<void>
Example
Section titled “Example”import { Principal } from '@icp-sdk/core/principal';import { PocketIc, PocketIcServer } from '@dfinity/pic';
const canisterId = Principal.fromUint8Array(new Uint8Array([0]));
const picServer = await PocketIcServer.start();const pic = await PocketIc.create(picServer.getUrl());
await pic.startCanister({ canisterId });
await pic.tearDown();await picServer.stop();stopCanister()
Section titled “stopCanister()”stopCanister(
options):Promise<void>
Defined in: packages/pic/src/pocket-ic.ts:345
Stops the given canister.
Parameters
Section titled “Parameters”options
Section titled “options”Options for stopping the canister, see StopCanisterOptions.
Returns
Section titled “Returns”Promise<void>
Example
Section titled “Example”import { Principal } from '@icp-sdk/core/principal';import { PocketIc, PocketIcServer } from '@dfinity/pic';
const canisterId = Principal.fromUint8Array(new Uint8Array([0]));
const picServer = await PocketIcServer.start();const pic = await PocketIc.create(picServer.getUrl());
await pic.stopCanister({ canisterId });
await pic.tearDown();await picServer.stop();stopLive()
Section titled “stopLive()”stopLive():
Promise<void>
Defined in: packages/pic/src/pocket-ic.ts:2148
Disables auto progress and stops the HTTP gateway started by makeLive. A gateway created with CreateInstanceOptions.httpGateway keeps running until the instance is torn down.
Returns
Section titled “Returns”Promise<void>
Example
Section titled “Example”const httpGatewayPort = await pic.makeLive();// make calls through the HTTP gateway...
await pic.stopLive();submitCall()
Section titled “submitCall()”submitCall(
options):Promise<SubmittedCall>
Defined in: packages/pic/src/pocket-ic.ts:1222
Submits an update call to the given canister without executing it. The call is executed by later rounds, e.g. from tick, and its result is fetched with awaitCall or ingressStatus.
Parameters
Section titled “Parameters”options
Section titled “options”Options for submitting the update call, see UpdateCallOptions.
Returns
Section titled “Returns”Promise<SubmittedCall>
The submitted call, see SubmittedCall.
Example
Section titled “Example”const call = await pic.submitCall({ canisterId, method: 'greet' });
await pic.ingressStatus(call); // null, the call has not been executed yetawait pic.tick();const res = await pic.ingressStatus(call); // the Candid-encoded responsetakeCanisterSnapshot()
Section titled “takeCanisterSnapshot()”takeCanisterSnapshot(
options):Promise<CanisterSnapshot>
Defined in: packages/pic/src/pocket-ic.ts:802
Takes a snapshot of the given canister’s code and memory, which loadCanisterSnapshot restores. Canister settings are not included.
Parameters
Section titled “Parameters”options
Section titled “options”Options for taking the snapshot, see TakeCanisterSnapshotOptions.
Returns
Section titled “Returns”Promise<CanisterSnapshot>
The snapshot, see CanisterSnapshot.
Example
Section titled “Example”const snapshot = await pic.takeCanisterSnapshot({ canisterId, sender });
// change the canister's state...
await pic.loadCanisterSnapshot({ canisterId, snapshotId: snapshot.id, sender,});tearDown()
Section titled “tearDown()”tearDown():
Promise<void>
Defined in: packages/pic/src/pocket-ic.ts:1289
Deletes the PocketIC instance.
Returns
Section titled “Returns”Promise<void>
Example
Section titled “Example”import { PocketIc, PocketIcServer } from '@dfinity/pic';
const picServer = await PocketIcServer.start();const pic = await PocketIc.create(picServer.getUrl());
await pic.tearDown();await picServer.stop();tick()
Section titled “tick()”tick(
times?):Promise<void>
Defined in: packages/pic/src/pocket-ic.ts:1314
Make the IC produce and progress by one block. Accepts a parameter times to tick multiple times,
the default is 1.
Parameters
Section titled “Parameters”times?
Section titled “times?”number = 1
The number of new blocks to produce and progress by. Defaults to 1.
import { PocketIc, PocketIcServer } from '@dfinity/pic';
const picServer = await PocketIcServer.start();const pic = await PocketIc.create(picServer.getUrl());
await pic.tick();
// or to tick multiple timesawait pic.tick(3);
await pic.tearDown();await picServer.stop();Returns
Section titled “Returns”Promise<void>
uninstallCode()
Section titled “uninstallCode()”uninstallCode(
options):Promise<void>
Defined in: packages/pic/src/pocket-ic.ts:420
Uninstalls the code of the given canister, removing its WASM module and memory. The canister and its settings are kept.
Parameters
Section titled “Parameters”options
Section titled “options”Options for uninstalling the code, see UninstallCodeOptions.
Returns
Section titled “Returns”Promise<void>
Example
Section titled “Example”await pic.uninstallCode({ canisterId, sender });
const { moduleHash } = await pic.canisterStatus({ canisterId, sender }); // nullupdateCall()
Section titled “updateCall()”updateCall(
options):Promise<Uint8Array<ArrayBufferLike>>
Defined in: packages/pic/src/pocket-ic.ts:1181
Makes an update call to the given canister.
Parameters
Section titled “Parameters”options
Section titled “options”Options for making the update call, see UpdateCallOptions.
Returns
Section titled “Returns”Promise<Uint8Array<ArrayBufferLike>>
The Candid-encoded response of the update call.
Example
Section titled “Example”import { Principal } from '@icp-sdk/core/principal';import { PocketIc, PocketIcServer } from '@dfinity/pic';import { _SERVICE, idlFactory } from '../declarations';
const wasm = resolve('..', '..', 'canister.wasm');
const picServer = await PocketIcServer.start();const pic = await PocketIc.create(picServer.getUrl());
canisterId = await pic.createCanister({ sender: controllerIdentity.getPrincipal(),});await pic.installCode({ canisterId, wasm });
const res = await pic.updateCall({ canisterId, method: 'greet',});
await pic.tearDown();await picServer.stop();updateCanisterSettings()
Section titled “updateCanisterSettings()”updateCanisterSettings(
options):Promise<void>
Defined in: packages/pic/src/pocket-ic.ts:672
Updates the settings of the given canister.
Parameters
Section titled “Parameters”options
Section titled “options”Options for updating the canister settings, see UpdateCanisterSettingsOptions.
Returns
Section titled “Returns”Promise<void>
Example
Section titled “Example”import { Principal } from '@icp-sdk/core/principal';import { PocketIc, PocketIcServer } from '@dfinity/pic';
const canisterId = Principal.fromUint8Array(new Uint8Array([0]));
const picServer = await PocketIcServer.start();const pic = await PocketIc.create(picServer.getUrl());
await pic.updateCanisterSettings({ canisterId, controllers: [Principal.fromUint8Array(new Uint8Array([1]))],});
await pic.tearDown();await picServer.stop();upgradeCanister()
Section titled “upgradeCanister()”upgradeCanister(
options):Promise<void>
Defined in: packages/pic/src/pocket-ic.ts:608
Upgrades the given canister with the given WASM module. This will reset the canister’s heap, but preserve stable memory. To create a canister to upgrade to, see createCanister. To install the initial WASM module to a new canister, see installCode.
Parameters
Section titled “Parameters”options
Section titled “options”Options for upgrading the canister, see UpgradeCanisterOptions.
Returns
Section titled “Returns”Promise<void>
Example
Section titled “Example”import { Principal } from '@icp-sdk/core/principal';import { PocketIc, PocketIcServer } from '@dfinity/pic';import { resolve } from 'node:path';
const canisterId = Principal.fromUint8Array(new Uint8Array([0]));const wasm = resolve('..', '..', 'canister.wasm');
const picServer = await PocketIcServer.start();const pic = await PocketIc.create(picServer.getUrl());
await pic.upgradeCanister({ canisterId, wasm });
await pic.tearDown();await picServer.stop();uploadCanisterSnapshot()
Section titled “uploadCanisterSnapshot()”uploadCanisterSnapshot(
options):Promise<Uint8Array<ArrayBufferLike>>
Defined in: packages/pic/src/pocket-ic.ts:924
Uploads a snapshot to the given canister from a directory on the machine running the PocketIC server, as written by downloadCanisterSnapshot. Restore the canister from it with loadCanisterSnapshot.
Parameters
Section titled “Parameters”options
Section titled “options”Options for uploading the snapshot, see UploadCanisterSnapshotOptions.
Returns
Section titled “Returns”Promise<Uint8Array<ArrayBufferLike>>
The ID of the uploaded snapshot.
verifyCanisterSignature()
Section titled “verifyCanisterSignature()”verifyCanisterSignature(
options):Promise<void>
Defined in: packages/pic/src/pocket-ic.ts:1610
Verifies a canister signature, as issued by canisters like Internet Identity.
Parameters
Section titled “Parameters”options
Section titled “options”VerifyCanisterSignatureOptions
Options for verifying the signature, see VerifyCanisterSignatureOptions. Throws if the signature is invalid.
Returns
Section titled “Returns”Promise<void>
Example
Section titled “Example”const nnsSubnet = await pic.getNnsSubnet();const rootKey = await pic.getPubKey(nnsSubnet.id);
await pic.verifyCanisterSignature({ message, signature, publicKey, rootKey,});create()
Section titled “create()”
staticcreate(url,options?):Promise<PocketIc>
Defined in: packages/pic/src/pocket-ic.ts:165
Creates a PocketIC instance.
Parameters
Section titled “Parameters”string
The URL of an existing PocketIC server to connect to.
options?
Section titled “options?”Options for creating the PocketIC instance see CreateInstanceOptions.
Returns
Section titled “Returns”Promise<PocketIc>
A new PocketIC instance.
Example
Section titled “Example”import { PocketIc, PocketIcServer } from '@dfinity/pic';
const picServer = await PocketIcServer.start();const pic = await PocketIc.create(picServer.getUrl());
const fixture = await pic.setupCanister<_SERVICE>({ idlFactory, wasmPath });const { actor } = fixture;
await pic.tearDown();await picServer.stop();