使用依赖项的模拟屏幕在Jest中产生“不是构造函数”

zrfyljdw  于 2023-11-15  发布在  Jest
关注(0)|答案(1)|浏览(203)

我在我的一个组件中使用了jose的SignJWT,但它总是导致'jose.SignJWT'不是一个构造函数。我不明白我做错了什么,哈哈
我是这么嘲笑的

jest.mock('jose', () => {
  return {
    decodeJwt: jest.fn(() => Promise.resolve({})),
    SignJWT: jest.fn().mockImplementation(() => {
      return {
        setProtectedHeader: jest.fn(),
        sign: jest.fn(),
      };
    }),
  };
});

字符串
我也试过FF:

jest.mock('jose', () => ({
  __esModule: true,
  decodeJwt: jest.fn(() => Promise.resolve({})),
  SignJWT: jest.fn().mockImplementation(() => {
    return {
      setProtectedHeader: jest.fn(() => this),
      sign: jest.fn(() => {}),
    };
  }),
}));


但现在写着token.sign is not a function
如果有帮助的话我想嘲笑这门课

export declare class SignJWT extends ProduceJWT {
    private _protectedHeader;
    /**
     * Sets the JWS Protected Header on the SignJWT object.
     *
     * @param protectedHeader JWS Protected Header. Must contain an "alg" (JWS Algorithm) property.
     */
    setProtectedHeader(protectedHeader: JWTHeaderParameters): this;
    /**
     * Signs and returns the JWT.
     *
     * @param key Private Key or Secret to sign the JWT with. See
     *   {@link https://github.com/panva/jose/issues/210#jws-alg Algorithm Key Requirements}.
     * @param options JWT Sign options.
     */
    sign(key: KeyLike | Uint8Array, options?: SignOptions): Promise<string>;
}

eulz3vhy

eulz3vhy1#

我认为你设置mock的方式有一些问题。尝试这种方式来模拟'SignJWT'类:

jest.mock('jose', () => ({
  __esModule: true,
  ...jest.requireActual('jose'), // Use the actual implementation for other exports
  SignJWT: jest.fn().mockImplementation(() => ({
    setProtectedHeader: jest.fn().mockReturnThis(),
    sign: jest.fn(),
  })),
}));

字符串
尝试给予这种方法,看看它是否解决了“is not a constructor”的问题。如果你遇到了“token.sign is not a function”的问题,请仔细检查sign方法是否被正确地模拟,遵循提供的示例。

相关问题