Pocket-ic not regonized globally on my mac m1

  1. I downloaded pocket-ic-arm64-darwin.gz

  2. Rename it to pocket-ic.gz from pocket-ic-arm64-darwin.gz

  3. gzip -d pocket-ic.gz

  4. chmod +x pocket-ic

  5. export POCKET_IC_BIN=“$(pwd)/pocket-ic”

  6. xattr -dr com.apple.quarantine pocket-ic

  7. ./pocket-ic --help

  8. % which pocket-ic
    pocket-ic not found?
    why that is happening ?
    in my npm prjoect console.log(Using PocketIC binary: ${process.env.POCKET_IC_BIN}); is undefined

npm run test

Error: PocketIC creation timeout
 ❯ Timeout._onTimeout setup/global-setup.ts:76:32
     74|      PocketIc.create(url),
     75|      new Promise((_, reject) => 
     76|        setTimeout(() => reject(new Error("PocketIC creation timeout")), 10000)
       |                                ^
     77|      )
     78|    ]) as PocketIc;

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/1]⎯


 Test Files  1 failed (1)
      Tests  1 skipped (1)
   Start at  09:57:13
   Duration  10.64s

export function randomString() {
  return Math.random().toString(36).substring(2, 8);
}

declare global {
  var __PIC__: PocketIcServer;
  var pic: PocketIc;
  var user: Identity;
  var actor: _SERVICE;
  var is_global_set: boolean;
  var loginAs: (user: Identity) => Promise<_SERVICE>;
  var register: () => Promise<void>;
  var newUser: (login?: boolean, name?: string) => Promise<Identity>;

  namespace NodeJS {
    interface ProcessEnv {
      PIC_URL: string;
    }
  }
}

vi.stubGlobal("matchMedia", () => ({
  addEventListener: () => {},
}));

const WASM_PATH = resolve(
  __dirname,
  "../../target",
  "wasm32-unknown-unknown",
  "release",
  "backend.wasm",
);

const setupTestEnvironment = async () => {
 try {
   console.log("Starting test environment setup...");
   
   // Check for POCKET_IC_BIN environment variable
  //  if (!process.env.POCKET_IC_BIN) {
  //    throw new Error("POCKET_IC_BIN environment variable not found. Please set it to the path of your PocketIC binary.");
  //  }
   
   console.log(`................Using PocketIC binary: ${import.meta.env.VITE_POCKET_IC_BIN}`);
   console.log(`................Using PocketIC binary: ${process.env.POCKET_IC_BIN}`);
   
   const alice = createIdentity("1");
   
   console.log("Starting PocketIC server...");
   const picIcServer = await PocketIcServer.start({
     showCanisterLogs: true,
   });

   const url = picIcServer.getUrl();
   console.log(`PocketIC server URL: ${url}`);

   console.log("Creating PocketIC instance...");
   const pic = await Promise.race([
     PocketIc.create(url),
     new Promise((_, reject) => 
       setTimeout(() => reject(new Error("PocketIC creation timeout")), 10000)
     )
   ]) as PocketIc;
   
   console.log("PocketIC instance created successfully");
   
   const setup: SetupCanisterOptions = {
     idlFactory,
     wasm,
   };
   
   console.log("Setting up canister...");
   const fixture = await pic.setupCanister<_SERVICE>(setup);
   console.log("Canister setup complete");

   process.env.PIC_URL = url;
   global.__PIC__ = picIcServer;
   global.pic = pic;
   global.user = alice;
   global.actor = fixture.actor;
   global.is_global_set = true;

   fixture.actor.setIdentity(alice);

   global.loginAs = async (user: Identity) => {
     fixture.actor.setIdentity(user);
     return fixture.actor;
   };

   global.register = async () => {
     await global.actor.register();
   };

   global.newUser = async (login: boolean = false, name = randomString()) => {
     const newUser: Identity = createIdentity(randomString());
     global.actor.setIdentity(newUser);
     
     if (!login) {
       global.actor.setIdentity(alice);
     }
     return newUser;
   };
   
   console.log("Test environment setup complete");
 } catch (error) {
   console.error("Setup failed:", error);
   if (global.__PIC__) {
     await global.__PIC__.stop();
   }
   throw error;
 }
};


beforeAll(setupTestEnvironment);

afterAll(async () => {
  // await global.pic.tearDown();
  // delete global.pic;
  // delete global.actor;
  // delete global.loginAs;
  // delete global.user;
});

which looks on your PATH, not in POCKET_IC_BIN

yes, but why pocket ic still not globally set

What do you mean with ‘globally set’?

So, when it put in in my main dir file:///Users/ahmed/pocket-ic i should pocket-ic --help but i got zsh: permission denied: pocket-ic even after chmod +x pocket-ic ?
in my test when i ran npm run test it timeout and process.env. POCKET_IC_BIN is undefined