You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Visual Studio Code中禁用Angular测试文件的类型检查

解决Angular Jest模拟类的类型检查报错问题

我懂你现在的困扰:用Jest模拟Apollo、HttpLink这类类的时候,明明运行时模拟逻辑没问题,但VS Code里的TypeScript类型检查却因为模拟构造函数不符合原类的参数要求,一直弹出红色错误。下面给你两种可行的解决方案:

方案一:临时禁用当前测试文件的类型检查

如果想快速搞定眼前的报错,可以在测试文件的最顶部加一行注释:

// @ts-nocheck

这会让TypeScript直接跳过整个文件的类型校验。不过要提醒你,这是个“治标不治本”的办法,可能会掩盖其他潜在的类型问题,所以更推荐下面的规范做法。

方案二:让模拟类适配原类型定义(推荐)

你可以调整Jest的模拟逻辑,让构造函数兼容原类的参数要求(哪怕内部完全忽略这些参数),这样就能通过TypeScript的类型检查,同时不影响Jest的模拟效果。

修改你的代码如下:

import { Apollo } from 'apollo-angular'
jest.mock('apollo-angular', () => {
  return {
    Apollo: jest.fn().mockImplementation(() => {
      return { create: jest.fn() }
    })
  }
})

import { HttpLink } from 'apollo-angular-link-http'
jest.mock('apollo-angular-link-http', () => {
  return {
    // 让模拟构造函数接受原类要求的参数(用下划线标记为未使用)
    HttpLink: jest.fn().mockImplementation((_options?: any) => {
      return { create: jest.fn() }
    })
  }
})

import { GraphqlService } from './graphql.service'
describe('GraphqlService', () => {
  let apollo = new Apollo()
  // 传入符合类型要求的参数(空对象就行,模拟逻辑里不会用到)
  let httpLink = new HttpLink({}) 
  let graphqlService

  beforeAll(() => {
    graphqlService = new GraphqlService(apollo, httpLink)
  })

  it('should be created', () => {
    expect(graphqlService).toBeTruthy()
  })

  it('should create apollo client correctly', () => {
    expect(apollo.create).toHaveBeenCalled()
  })
})

这里用mockImplementation定义了构造函数的逻辑,让它接受原类要求的参数(用_options表示这个参数不会被使用),这样TypeScript就不会再挑刺,同时Jest的模拟依然能正常捕获方法调用。

要是你实在不想传参数,也可以用类型断言临时绕过检查,但这种方式不够优雅:

let httpLink = new (HttpLink as any)()

总的来说,方案二更值得推荐,既能解决当前的报错,又能保持代码的类型安全性,避免遗漏其他潜在问题。

内容的提问来源于stack exchange,提问作者Thomas Betous

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:49:02