javascript - node:crypto-ის დაბრუნებული მნიშვნელობის მიბაძვა Vitest-ით


მე ვცადო კიდევ ერთ დაკავშირებულ პოსტზე ამ თემაზე შემქმნელის იგივე შედეგით.

ჩემს პოსტზე პასუხი გარდაიცვალა, მინდა კიდევ ერთხელ ვცადო, თუ ვინმეს აქვს იდეა, თუ როგორ უნდა მექომაგოს node:crypto ფუნქცია ან ნებისმიერი eingebuilt ფუნქცია.

ჩემი ძირითადი კეისის შესწავლა არის მარტივი randomUUID გენერატორი, უბრალოდ იმის გამოსაცდელად, რომ მაკინგი მუშაობს, ამიტომ მინდოდა randomUUID-ის მაკირება იმისათვის, რომ დაბრუნებულიყო ის მნიშვნელობა, რომელიც მინდოდა: "123456789"

import { randomUUID } from "node:crypto";

export function getRandomUUID() :string {
  return randomUUID();
}

და მე დავიწყე, როგორც ზემოთ მოცემულ პოსტში შეთავაზებული გადაწყვეტილება:

 vi.mock("node:crypto", async () => {
      const actual =
        await vi.importActual<typeof import("node:crypto")>("node:crypto");
      return {
        ...actual,
        randomUUID: vi.fn(() => "123456789"),
      };
    });

getRandomUUID ამ შემთხვევაში დაუდგენელს აბრუნებს

მე ასევე ვცადე მსგავსი სასაცილო გადაწყვეტა ამ პოსტზე

მაგრამ vitest წარუმატებელია იმპორტის შესახებ შეცდომით:

Error: [vitest] No "default" export is defined on the "node:crypto" mock. Did you forget to return it from "vi.mock"?
If you need to partially mock a module, you can use "importOriginal" helper inside:

vi.mock(import("node:crypto"), async (importOriginal) => {
  const actual = await importOriginal()
  return {
    ...actual,
    // your mocked methods
  }
})

უკვე სცადე ესეც ჩემი მაოკ მეთოდით (მაგრამ მაოკს არ მოსწონს randomUUID-ის დაბრუნების ტიპი Type 'string' is not assignable to type '$ {string}-$ {string}-$ {string}-$ {string}-$ {string}')

    vi.mock(import("node:crypto"), async (importOriginal) => {
      const actual = await importOriginal();
      return {
        actual,
        // your mocked methods
        randomUUID: vi.fn(() => "123456789"),
      };
    });

და არ ეცინი რეალურ მეთოდს

პასუხი #1

მინიათ ეს რაც ცდილობ გაიგო, მაგრამ დოკუმენტაციიდან მაგალითად სადაც ისინი მაკულირებენ pg, მე დავრჩი შემდეგით:

main.js
import { randomUUID } from 'node:crypto'

export function getRandomUUID(): string {
  return randomUUID()
}
main.test.js
import { describe, expect, it, vi } from 'vitest'
import { getRandomUUID } from './main.js'

vi.mock('node:crypto', () => {
  return { randomUUID: vi.fn(() => '123456789') }
})

describe('main', () => {
  it('should be true', () => {
    expect(getRandomUUID()).toBe('123456789')
  })
})

გამოსავალი :

 ✓ main.test.ts (1 test) 2ms
   ✓ main > should be true

 Test Files  1 passed (1)
      Tests  1 passed (1)
   Start at  10:38:42
   Duration  11ms