typescript - 开 Jest mock TypeScript 类 "No overload expects 1 type arguments"

标签 typescript mocking jestjs

我正在尝试使用 Jest 模拟 TypeScript 类,我显然正在做某事,因为收到以下错误:

error TS2743: No overload expects 1 type arguments, but overloads do exist that expect either 0 or 2 type arguments.

这是我的代码:

Foo.ts

export default class Foo {
  bar(): number {
    return Math.random()
  }
}

Foo.test.ts

import Foo from './Foo'

describe('Foo', () => {
  it("should pass", () => {
    const MockFoo = jest.fn<Foo>(() => ({
      bar: jest.fn(() => {
        return 123
      }),
    }))
  })
})

完整的错误:

TypeScript diagnostics (customize using `[jest-config].globals.ts-jest.diagnostics` option):
src/Foo.test.ts:6:29 - error TS2743: No overload expects 1 type arguments, but overloads do exist that expect either 0 or 2 type arguments.

6     const MockFoo = jest.fn<Foo>(() => ({
                              ~~~

更新

如果有任何相关性,这是我的 Jest 配置:

module.exports = {
  moduleFileExtensions: ['ts', 'js'],
  transform: {
    '^.+\\.ts$': 'ts-jest',
  },
  testMatch: ['**/src/**/*.test.(ts)'],
  testEnvironment: 'node',
};

最佳答案

Jest 具有以下 jest.fn 的签名:

/**
 * Creates a mock function. Optionally takes a mock implementation.
 */
function fn<T, Y extends any[]>(implementation?: (...args: Y) => T): Mock<T, Y>;

因此,您需要为 args 指定类型数组,在您的特定情况下,您可以只传递一个空数组,因为您的实现函数中没有 args。

const MockFoo = jest.fn<Foo, []>(() => ({

关于typescript - 开 Jest mock TypeScript 类 "No overload expects 1 type arguments",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54941165/

相关文章:

angular - 为什么添加关键字 `let` 或 `var` 会使代码无法编译

javascript - 为什么 React 需要 jsdom 进行测试?

typescript - 是什么导致 Jest 在此代码中显示 75% 的分支覆盖率?

javascript - react ,开 Jest : simulate submit form unit test

angular - setCenter 在 angular2-google-maps 中不起作用

java - 部署在 TomCat 上时,我的 Angular + Spring 应用程序路由不起作用

angular - 如何使用 mat-sort-header 按日期字符串排序?

PHPUnit 模拟对象问题

c# - 在 RhinoMocks 中重置模拟

scala - 用 scala-mock 模拟一个特征的 val